В качестве альтернативы, вы можете использовать однострочное быстрое геокодирование через 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
Таким образом, вы имеют
Каково Ваше определение запутанного кода? Для меня запутанный код является слишком длинным, неструктурированным и хаотическим методом/функцией. Этого не происходит из-за изменяющихся требований, но из-за лени разработчиков. Если необходимо переписать метод, потому что вещи изменились, можно также очистить его непосредственно без много служебного.
Если Вы имеете в виду плохо разработанную структуру объекта вместо этого, можно быть правы. Если требования изменятся слишком быстро, то Вы легко закончите с классами, которые больше не делают то, что они были предназначены для, плохие иерархии объектов, и т.п..
Существуют некоторые tipps для предотвращения этого:
Не сверхразрабатывайте в начале. Попытайтесь сохранить свои методы, классы и иерархии классов максимально простыми делать изменения менее трудными.
После того, как требование изменяется, не начинайте реализовывать его прямо тогда, но предпринимайте шаги назад и смотрите, если Ваша структура кода должна быть изменена, прежде чем новая возможность может вписаться.
Свяжитесь со своим клиентом, что изменение требует некоторого времени. Если Вы будете знать, что они знают, что изменение требования также подразумевает изменения в структуре Вашего кода, то у Вас будет меньше давления для сжатия кода в существующие структуры.
Всегда осуществляйте рефакторинг при кодировании. По моему опыту, маленькие рефакторинги как перемещение избыточного кода от нескольких мест в отдельный метод или класс являются самыми эффективными для содержания кода в чистоте. Будьте всегда в поисках запахов кода и удалите их максимально быстро для создания работы легче. Это берет некоторый опыт, но теперь является правильным временем для запуска обучения это :-)
Как сказанный krosenvold, избегите рискованных действий путем добавления тестовых сценариев к коду для устранения страха перед большими изменениями. Работая над большой унаследованной системой самостоятельно, я знаю этот страх и что как работать без системы поддержки. Когда Вы работаете над своей системой поддержки сначала, Это становится меньшим количеством приключения для внесения необходимых изменений.
Я думаю, что один из ключевых пунктов должен написать код, который легко changable. Это обычно способствует определенному вместо краткого обзора. Существуют также некоторые шаблоны разработки, которые имеют тенденцию создавать очень большие столбы через Ваш код. Такие столбы имеют тенденцию внести изменения, происходят в неправильных местах, потому что Вы становитесь боящимися изменения тех монументальных центральных частей Вашего кода, который действительно необходимо изменять.
Тестовое покрытие является действительно великим помощником в разрешении Вам сделать бесстрашный рефакторинг. Это - парашют, который имеет значение между сумасшедшим и нормальным тестовым пилотом плоскости.
Частые изменения в требованиях проекта, включая добавление или удаление функций, не обязательно приводят к запутанному коду, но это, вероятно, будет, если Вы не запишете модульное программное обеспечение (см. Модульное программирование). Вещи бороться за включают следующее:
Учитывая хорошо организованные модули (снова, они могут быть функциями, классами, библиотеками и полными приложениями), которые сотрудничают, будучи слабо связанным, способ иметь дело с изменениями в требованиях состоит в том, чтобы записать новые модули, подробно остановиться на существующих модулях и модулях подключения новыми способами.
Что касается того, как Вы прибываете в ситуацию наличия этих хороших программных модулей во-первых, рефакторинг является ключевым. Другие методы, такие как поблочное тестирование и методология разработки (такие как Толпа) также полезны, но рефакторинг является Вашим хлебом с маслом - и это - одна вещь, для которой много деловой среды не делают достаточно времени.
Для хорошего совета относительно написания слабо связанного кода проведите некоторое исследование на внедрении зависимости.
Хорошее тестовое покрытие является лучшей защитой против частых изменений.
Для любого требования разработайте свой код для максимальных возможных изменений. Это может быть сделано путем разделения постоянной части от переменной части. Эта привычка занимает время перед разработкой. Запутанный код появляется большую часть времени из-за изменения требования, и Ваш дизайн и программирование должны смочь противостоять ему.
http://www.dreamsongs.org/Files/DesignBeyondHumanAbilitiesSimp.pdf был бы полезен.
Часто изменяющиеся требования являются проблемой, которую Гибкие методы были разработаны для обработки - они были созданы по крайней мере частично в знак признания проблемы, которую требования действительно изменяют, часто на очень серьезных основаниях.
Если требование изменяет это, Вы уже не реализовали, то влияние должно быть минимальным, если Вы не инвестируете много усилия в первичный дизайн, но справляетесь с эволюцией дизайна маленькими повторениями, постоянным тестированием и рефакторингом.
Если требование, которое было уже реализовано изменения, и Вы не можете переместить свою дату завершения, то у Вас есть три варианта: работайте более длительные часы для восстановления потерянного времени, требования отбрасывания (уменьшите объем) заплатить за дополнительную работу, или уменьшать качество продукта (который мог бы быть опцией "спагетти"").
расползание границ проекта / плохой (постоянно меняющийся) анализ требований:
избегайте его как чумы, лучший совет, который можно дать для гарантии любого качества (код или иначе), это будет всегда иметь отрицательные эффекты (на все стороны) независимо от того, как хорошо Вы пытаетесь запланировать свои проекты разработки.
Лучшее решение состоит в том, чтобы установить этапы и знать, когда показать эту ссылку на то, кто бы ни продолжает изменять требования.
Можно быть uber-людьми в подходе, думающем из поля и делающем код, максимально легкий измениться, но Вы все еще перестанете работать ужасно, если Вы просто скажете да всем функциям, не понимая, как это должно влиять на пирамиду Качественного разового Объема проекта.
Если Вы уезжаете с одним советом: Осуществите рефакторинг, осуществите рефакторинг, осуществите рефакторинг! Часто!
Все остальное - детали о создании легче рефакторинга.
Питание для частых изменений требований является целью следующего:
Таким образом, если Вы хотите избежать спагетти, изучить и применить вышеупомянутые понятия.