Как иметь дело с чудовищными Действиями Struts?

Вы можете использовать метод LINQ Intersect , чтобы найти элементы, совместно используемые a (или b) и c, а затем убедиться, что количество одинаковое.

if (a.Intersect(c).Count() == c.Count())
    Console.WriteLine("Everything in c is in a.")

5
задан thvo 16 October 2008 в 17:28
поделиться

7 ответов

Мой способ иметь дело с этим был бы:

  • не делайте 'всего сразу'
  • каждый раз, когда Вы изменяете что-либо, оставляете его лучше, чем Вы нашли его
    • замена условных выражений с отдельными реализациями Действия является одним шагом.
    • Еще лучше: Сделайте свои реализации отдельными от классов Действия так, чтобы можно было использовать его при изменении платформ
    • Сохраните свою новую реализацию Команды абсолютно без ссылок на Struts, используйте свои новые Действия в качестве Обертки вокруг этих реализаций.
    • Вы, возможно, должны были бы предоставить интерфейсы своему Struts ActionForms для раздавания их, не копируя все данные. С другой стороны - Вы могли бы хотеть раздать другие объекты, чем ActionForms, которые обычно являются набором Строк (см. свой другой вопрос о Struts 1.2 ActionForms),
  • начните перемещать части в более новую и лучшую технологию. Struts 1.2 был большим, когда он вышел, но определенно не, что Вы хотите поддерживать в вечности. Существуют некоторые поколения лучших платформ теперь.

Там определенно более - Извините, у меня заканчивается время здесь...

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

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

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

Это - просто мой личный опыт.

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

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

Original Hierarchy:      New Hierarchy:

     Action                   Action
       |                        |
       |                      BaseA
  (old)ClassA                   |
                       +--------+----------+
                       |        |          |
                   ClassB (new)ClassA   ClassC
2
ответ дан 18 December 2019 в 07:32
поделиться
  1. Пойдите один метод за один раз
  2. Запишите некоторые тестовые сценарии, которые можно воспроизвести позже. Пример здесь (удостоверяются, что поразили столько путей через код, сколько Вы можете, т.е. все пользовательские жесты на странице, которые называют это действие),
  3. осуществите рефакторинг метод для сокращения его сложности путем создания меньших методов, которые делают меньшие вещи.
  4. Повторно выполненные тесты, поскольку Вы делаете это

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

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

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

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

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

Один длинный метод никогда не хорош, если это, оказывается, не единственный оператор переключения, где дела являются очень простыми (маркерный парсинг или что-то как этот).

Вы могли, по крайней мере, осуществить рефакторинг длинный метод в меньшие методы с описательными именами.

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

enum Operation {
  ADD, DELETE;
}

...

Operation operation = determineOperation(form);
if (operation == Operation.DELETE) { 
  doDelete(form); 
} else if (operation == Operation.ADD) {
  doAdd(form);
}

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

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

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

Жесткая проблема, но типичный для ранней разработки веб-приложения.

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

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

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

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

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

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

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