Частое изменение требований приводят к запутанному коду? [закрытый]

В качестве альтернативы, вы можете использовать однострочное быстрое геокодирование через tmaptools::geocode_OSM():

Данные

library(tmaptools)
addresses <- data.frame(address = c("New York", "Berlin", "Huangpu Qu", 
                                    "Vienna", "St. Petersburg"), 
                                    stringsAsFactors = FALSE)

Код

result <- lapply(addresses[, 1], geocode_OSM)

> result 
$address
           query      lat       lon  lat_min  lat_max   lon_min   lon_max
1       New York 40.73086 -73.98716 40.47740 40.91618 -74.25909 -73.70018
2         Berlin 52.51704  13.38886 52.35704 52.67704  13.22886  13.54886
3     Huangpu Qu 31.21823 121.48030 31.19020 31.24653 121.45220 121.50596
4         Vienna 48.20835  16.37250 48.04835 48.36835  16.21250  16.53250
5 St. Petersburg 27.77038 -82.66951 27.64364 27.91390 -82.76902 -82.54062

Таким образом, вы имеют

  1. центроиды ( lon , шир ), которые важны для Карт Google и [ 1111]
  2. граничные блоки ( lon_min , lat_min , lon_max , lat_max ), которые отображают такие службы, как OSM или Тычинка нужна.
8
задан skaffman 25 July 2011 в 22:17
поделиться

10 ответов

Каково Ваше определение запутанного кода? Для меня запутанный код является слишком длинным, неструктурированным и хаотическим методом/функцией. Этого не происходит из-за изменяющихся требований, но из-за лени разработчиков. Если необходимо переписать метод, потому что вещи изменились, можно также очистить его непосредственно без много служебного.

Если Вы имеете в виду плохо разработанную структуру объекта вместо этого, можно быть правы. Если требования изменятся слишком быстро, то Вы легко закончите с классами, которые больше не делают то, что они были предназначены для, плохие иерархии объектов, и т.п..

Существуют некоторые tipps для предотвращения этого:

  • Не сверхразрабатывайте в начале. Попытайтесь сохранить свои методы, классы и иерархии классов максимально простыми делать изменения менее трудными.

  • После того, как требование изменяется, не начинайте реализовывать его прямо тогда, но предпринимайте шаги назад и смотрите, если Ваша структура кода должна быть изменена, прежде чем новая возможность может вписаться.

  • Свяжитесь со своим клиентом, что изменение требует некоторого времени. Если Вы будете знать, что они знают, что изменение требования также подразумевает изменения в структуре Вашего кода, то у Вас будет меньше давления для сжатия кода в существующие структуры.

  • Всегда осуществляйте рефакторинг при кодировании. По моему опыту, маленькие рефакторинги как перемещение избыточного кода от нескольких мест в отдельный метод или класс являются самыми эффективными для содержания кода в чистоте. Будьте всегда в поисках запахов кода и удалите их максимально быстро для создания работы легче. Это берет некоторый опыт, но теперь является правильным временем для запуска обучения это :-)

  • Как сказанный krosenvold, избегите рискованных действий путем добавления тестовых сценариев к коду для устранения страха перед большими изменениями. Работая над большой унаследованной системой самостоятельно, я знаю этот страх и что как работать без системы поддержки. Когда Вы работаете над своей системой поддержки сначала, Это становится меньшим количеством приключения для внесения необходимых изменений.

18
ответ дан 5 December 2019 в 05:57
поделиться

Я думаю, что один из ключевых пунктов должен написать код, который легко changable. Это обычно способствует определенному вместо краткого обзора. Существуют также некоторые шаблоны разработки, которые имеют тенденцию создавать очень большие столбы через Ваш код. Такие столбы имеют тенденцию внести изменения, происходят в неправильных местах, потому что Вы становитесь боящимися изменения тех монументальных центральных частей Вашего кода, который действительно необходимо изменять.

Тестовое покрытие является действительно великим помощником в разрешении Вам сделать бесстрашный рефакторинг. Это - парашют, который имеет значение между сумасшедшим и нормальным тестовым пилотом плоскости.

4
ответ дан 5 December 2019 в 05:57
поделиться
  1. ожидайте изменения, если/когда Вы можете, и обобщать требования, если это возможно,
  2. что еще более важно, ожидайте время между изменениями
  3. разделите работу/функции/повторения на блоки, таким образом, они могут быть завершены во время между изменениями
  4. вуаля! Вы теперь делаете, гибкое динамическое и постоянное изменение кажется нормальным 8-P
  5. примите аспирин, хныканье в боссе, цикл назад к № 1 ;-)
2
ответ дан 5 December 2019 в 05:57
поделиться

Частые изменения в требованиях проекта, включая добавление или удаление функций, не обязательно приводят к запутанному коду, но это, вероятно, будет, если Вы не запишете модульное программное обеспечение (см. Модульное программирование). Вещи бороться за включают следующее:

  • Каждый модуль (является ли это функцией, классом, библиотекой или законченным приложением) имеет четко определенную цель.
  • Каждый модуль идеально не больше, чем он должен служить своей определенной цели.
  • Модули слабо связываются, означая, что ими можно заменить другие модули, не заставляя программное обеспечение повредиться.
  • Модули могут быть протестированы индивидуально, чтобы проверить, что они служат своей цели без ошибки.
  • Модули организованы способом, который помогает сделать проблемную область интуитивной другим программистам.

Учитывая хорошо организованные модули (снова, они могут быть функциями, классами, библиотеками и полными приложениями), которые сотрудничают, будучи слабо связанным, способ иметь дело с изменениями в требованиях состоит в том, чтобы записать новые модули, подробно остановиться на существующих модулях и модулях подключения новыми способами.

Что касается того, как Вы прибываете в ситуацию наличия этих хороших программных модулей во-первых, рефакторинг является ключевым. Другие методы, такие как поблочное тестирование и методология разработки (такие как Толпа) также полезны, но рефакторинг является Вашим хлебом с маслом - и это - одна вещь, для которой много деловой среды не делают достаточно времени.

Для хорошего совета относительно написания слабо связанного кода проведите некоторое исследование на внедрении зависимости.

2
ответ дан 5 December 2019 в 05:57
поделиться

Хорошее тестовое покрытие является лучшей защитой против частых изменений.

2
ответ дан 5 December 2019 в 05:57
поделиться

Для любого требования разработайте свой код для максимальных возможных изменений. Это может быть сделано путем разделения постоянной части от переменной части. Эта привычка занимает время перед разработкой. Запутанный код появляется большую часть времени из-за изменения требования, и Ваш дизайн и программирование должны смочь противостоять ему.

http://www.dreamsongs.org/Files/DesignBeyondHumanAbilitiesSimp.pdf был бы полезен.

0
ответ дан 5 December 2019 в 05:57
поделиться

Часто изменяющиеся требования являются проблемой, которую Гибкие методы были разработаны для обработки - они были созданы по крайней мере частично в знак признания проблемы, которую требования действительно изменяют, часто на очень серьезных основаниях.

Если требование изменяет это, Вы уже не реализовали, то влияние должно быть минимальным, если Вы не инвестируете много усилия в первичный дизайн, но справляетесь с эволюцией дизайна маленькими повторениями, постоянным тестированием и рефакторингом.

Если требование, которое было уже реализовано изменения, и Вы не можете переместить свою дату завершения, то у Вас есть три варианта: работайте более длительные часы для восстановления потерянного времени, требования отбрасывания (уменьшите объем) заплатить за дополнительную работу, или уменьшать качество продукта (который мог бы быть опцией "спагетти"").

0
ответ дан 5 December 2019 в 05:57
поделиться

расползание границ проекта / плохой (постоянно меняющийся) анализ требований:

избегайте его как чумы, лучший совет, который можно дать для гарантии любого качества (код или иначе), это будет всегда иметь отрицательные эффекты (на все стороны) независимо от того, как хорошо Вы пытаетесь запланировать свои проекты разработки.

Лучшее решение состоит в том, чтобы установить этапы и знать, когда показать эту ссылку на то, кто бы ни продолжает изменять требования.

Можно быть uber-людьми в подходе, думающем из поля и делающем код, максимально легкий измениться, но Вы все еще перестанете работать ужасно, если Вы просто скажете да всем функциям, не понимая, как это должно влиять на пирамиду Качественного разового Объема проекта.

0
ответ дан 5 December 2019 в 05:57
поделиться

Если Вы уезжаете с одним советом: Осуществите рефакторинг, осуществите рефакторинг, осуществите рефакторинг! Часто!

Все остальное - детали о создании легче рефакторинга.

0
ответ дан 5 December 2019 в 05:57
поделиться

Питание для частых изменений требований является целью следующего:

  • Объектно-ориентированное проектирование (Домен Abstracting Business и разделение его в управляемые целевые понятия)
  • Шаблоны разработки (снова использующий установленные решения для кодирования)
  • Основанная на MVC разработка (Разделение Данных, Бизнес-логики и Представления/презентации)
  • Архитектурная основанная на платформе разработка (Вы разрабатываете архитектурную платформу сначала прежде, чем фиксировать любое определенное для проекта проектирование и разработку),

Таким образом, если Вы хотите избежать спагетти, изучить и применить вышеупомянутые понятия.

0
ответ дан 5 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: