Что лучший способ состоит в том, чтобы переместить существующее грязное веб-приложение в изящный MVC? [закрытый]

char *hexstring = "deadbeef10203040b00b1e50", *pos = hexstring;
unsigned char val[12];
while( *pos )
{
  if( !((pos-hexstring)&1) )
    sscanf(pos,"%02x",&val[(pos-hexstring)>>1]);
  ++pos;
}

sizeof (val) / sizeof (val [0]) является избыточным!

5
задан travis 2 September 2008 в 18:40
поделиться

8 ответов

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

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

11
ответ дан 18 December 2019 в 07:58
поделиться

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

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

2
ответ дан 18 December 2019 в 07:58
поделиться

Сначала заберите копию Michael Feather, Рабочего Эффективно с Унаследованным кодом. Затем определите, как лучше всего протестировать существующий код. Худший случай - то, что Вы застреваете только с некоторыми регрессионными тестами высокого уровня (или ничто вообще) и Если Вы удачливы, что будут модульные тесты. Затем это - случай медленного устойчивого рефакторинга, надо надеяться, при добавлении новой бизнес-функциональности одновременно.

3
ответ дан 18 December 2019 в 07:58
поделиться

Это более трудно сделать в приложениях, которые находятся только в режиме техобслуживания, потому что трудно убедить управление, что перезапись чего-то, что уже 'работает', стоит сделать. Я запустил бы путем применения принципов MVC к любому новому коду, что Вы можете продолжить работать (т.е. бизнес-логика перемещения к чему-то сродни модели, положите весь свой код расположения/представления на одно место),

Поскольку Вы приобретаете опыт с новым кодом в MVC, можно начать видеть возможности изменить существующий код тонко так, чтобы он также упал в строке. Это может быть очень медленный процесс, но если можно показать преимущества этого способа сделать его затем, Вы сможете убедить других и получить всю команду на борту.

2
ответ дан 18 December 2019 в 07:58
поделиться

Я согласился бы с медленным подходом рефакторинга; например, возьмите тот код копировать-и-вставлять и извлеките его в то, что соответствующая парадигма Java (класс, возможно? или еще лучше, пользуйтесь существующей библиотекой?). Когда Ваш код будет действительно чистым и кратким, и все же недоставая полной архитектурной стратегии, затем Вы сможете заставить вещи вписаться в полную архитектуру намного более легко.

1
ответ дан 18 December 2019 в 07:58
поделиться

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

У Вас есть приложение, которое записано в 1 000 + строка длинный JSPs. Это, вероятно, имеет ужасную Модель предметной области (если это даже имеет один вообще), и не делает просто презентации MIX с бизнес-логикой, это СМЕШИВАЕТ его и находится там и продолжает шевелиться в течение многих часов. Нет никакого способа вынуть код, который является дрянным и перемещение в Класс контроллера MVC и все еще делать правильную вещь, Вы только закончите с приложением MVC с анемичной моделью предметной области или той, которая имеет материал как вызовы Базы данных в коде Контроллера, Вы все еще перестали работать.

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

1
ответ дан 18 December 2019 в 07:58
поделиться

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

0
ответ дан 18 December 2019 в 07:58
поделиться

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

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

Для контроллера лучше сделать хиты базы данных внезапно, а не делать попытку их по частям. Пользователи могут и обычно терпеть загрузку страницы, но вывод страницы будет намного быстрее, если все данные базы данных будут даны коду рендеринга, а не зависанию кода рендеринга и не предоставлению данных клиенту, в то время как это пытается считать еще одну часть данных из базы данных.

Я чувствую Вашу боль и желаю Вам удачи в этом усилии. Теперь, когда необходимо поддержать приложение, которое оскорбляет Spring Webflow, это - другая история :)

0
ответ дан 18 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

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