Перезапись или восстановление?

matches(); не буферизует, а find() - буферы. find() сначала выполняет поиск в конце строки, индексирует результат и возвращает логическое значение и соответствующий индекс.

Вот почему, когда у вас есть такой код, как

1:Pattern.compile("[a-z]");

2:Pattern.matcher("0a1b1c3d4");

3:int count = 0;

4:while(matcher.find()){

5:count++: }

В 4: механизм регулярных выражений с использованием структуры шаблонов будет читать весь ваш код (индекс для индексации, как указано regex[single character], чтобы найти хотя бы одно совпадение. Если такое совпадение найдено, оно будет проиндексировано, тогда цикл будет выполняться на основе индексированного результата else, если он не выполнил вычисления, как matches(); Оператор while никогда не будет выполняться, так как первый символ совпадающей строки не является алфавитом.

12
задан John Channing 29 August 2008 в 20:27
поделиться

11 ответов

Это действительно зависит от того, как плохо это.

Если это - маленькая система, и Вы полностью понимаете это, то переписывание не является сумасшедшим.

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

Вопросы для рассмотрения:

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

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

10
ответ дан 2 December 2019 в 03:49
поделиться

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

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

Инструмент как javadoc или doxygen, если не уже используемый, может также помочь улучшить документацию кода и понятность.

Аргументы против полного переписывают довольно сильное. Те тонны "небольших ошибок" и поведений, которые были кодированы в за период времени исходного проекта, будут красться назад в снова.

10
ответ дан 2 December 2019 в 03:49
поделиться

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

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

3
ответ дан 2 December 2019 в 03:49
поделиться

Посмотрите Вещи эссе Joel Spolsky, которые Вы Никогда не должны Делать. Таким образом, когда Вы переписываете Вас, проигрывают все уроки, Вы учились заставлять свой текущий код работать способ, которым он должен работать.

См. также: Большой комок грязи

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

Осуществите рефакторинг, если это не очень плохо действительно.

У Joel есть много для высказывания относительно этого...

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

2
ответ дан 2 December 2019 в 03:49
поделиться

Одной причиной перезаписи в одном из моих предыдущих заданий была неспособность найти разработчиков с достаточным опытом работать над исходной кодовой базой.

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

Я еще не услышал, как это удалось :)

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

Мы добираемся для восстановления с нуля!

Мы сделаем его правильно на этот раз!

и т.д.

2
ответ дан 2 December 2019 в 03:49
поделиться

Существует новый книжный выход, Разработка приложений Существующих производств в.NET Baley и Belcham. Первая глава является бесплатной, и говорит об этих проблемах от главным образом перспектива агностика платформы.

2
ответ дан 2 December 2019 в 03:49
поделиться

Восстановление, или что еще более важно, осуществляет рефакторинг. И потому что Joel сказал так и также потому что, если это - Ваш код, Вы, вероятно, изучили тонну больше материала, так как Вы коснулись этого кода в последний раз. Если Вы записали это в.NET 1.1, можно обновить его до 3,5 SP1. Вы добираетесь, чтобы войти и произвести чистку всего старого закомментированного кода. Вы 100x лучше как разработчик теперь чем тогда, когда Вы сначала написали этот код.

Одно исключение я думаю, - когда код использует действительно устаревшие технологии - в этом случае Вы могли бы быть лучше обслужены путем записи новой версии. При рассмотрении некоторого приложения VB6 с 10 000 строк кода с бэкендом базы данных Access, очевидно, настроенным кем-то, кто не знал много о том, как базы данных работают (который мог очень хорошо быть Вами восемь лет назад), затем, можно, вероятно, осуществить более быстрое, решение C#/SQL-based в части времени и кода.

2
ответ дан 2 December 2019 в 03:49
поделиться

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

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

1
ответ дан 2 December 2019 в 03:49
поделиться

В зависимости от Вашей ситуации у Вас могла бы быть другая опция: сторонний код в лицензии.

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

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

1
ответ дан 2 December 2019 в 03:49
поделиться

Я настоятельно рекомендую чтение, "Работающее Эффективно с Унаследованным кодом" Michael Feathers. Это тренирует совет относительно того, как осуществить рефакторинг Ваш код так, чтобы это была тестируемая единица.

1
ответ дан 2 December 2019 в 03:49
поделиться
Другие вопросы по тегам:

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