Вы можете использовать метод LINQ Intersect , чтобы найти элементы, совместно используемые a
(или b
) и c
, а затем убедиться, что количество одинаковое.
if (a.Intersect(c).Count() == c.Count())
Console.WriteLine("Everything in c is in a.")
Мой способ иметь дело с этим был бы:
Там определенно более - Извините, у меня заканчивается время здесь...
Действия Struts, в моем уме, не должны иметь особого кода в них вообще. Они должны просто взаимодействовать непосредственно с запросом, и ответ - берут некоторые данные из формы или параметра запроса, передают ту информацию к Уровню служб и затем помещают некоторый материал в Ответ, возражают или возможно сохраняют некоторые данные на сессии пользователя.
Я рекомендовал бы избегать выполнения наследования с классами действия. Это походит на хорошую идею сначала, но я думаю рано или поздно, что Вы понимаете, что Вы - вещи убывания обуви больше, чем Вы на самом деле делаете кодовую базу устойчивой. Struts имеет достаточно основных действий, как, если Вы создаете новые, Вы, вероятно, получили код в веб-слое, который не должен быть там.
Это - просто мой личный опыт.
Я имел дело с этим типом вещи прежде. Хороший первый шаг должен вставить другой базовый класс в цепочку наследования между Действием, и один из исходных чудовищных классов действия (позволяет, называют это ClassA). Особенно, если у Вас нет времени, чтобы сделать все сразу. Затем можно начать вытаскивать части функциональности в меньшие параллельные классы Действия (ClassB, ClassC). Что-либо это распространено между исходным ClassA и новыми пересмотренными классами, может потянуться в новый базовый класс. Таким образом, иерархия теперь похожа на это:
Original Hierarchy: New Hierarchy:
Action Action
| |
| BaseA
(old)ClassA |
+--------+----------+
| | |
ClassB (new)ClassA ClassC
На данном этапе Вы осуществили рефакторинг версию большого огромного раздражающего метода. Теперь можно на самом деле начать создавать определенные действия.
Можно использовать недавно пересмотренный класс в качестве базового класса и реализовать каждое определенное действие как подкласс с помощью тех пересмотренных маленьких методов.
После того как Вы сделали это, у Вас должно быть хорошее изображение логики, совместно использованной классами, и может подтягивание или продвигать вниз те методы по мере необходимости.
Это не забава, но если Вы будете работать над кодовой базой некоторое время, это сэкономит Вам время и головные боли.
Один длинный метод никогда не хорош, если это, оказывается, не единственный оператор переключения, где дела являются очень простыми (маркерный парсинг или что-то как этот).
Вы могли, по крайней мере, осуществить рефакторинг длинный метод в меньшие методы с описательными именами.
Если вообще возможный Вы могли бы запустить свой метод с распознавания, что это - это, должен сделать путем исследования формы, и затем если/еще путь к различным вариантам. Нет вложенная IFS, хотя, это склонно делать код нечитабельным. Просто
enum Operation {
ADD, DELETE;
}
...
Operation operation = determineOperation(form);
if (operation == Operation.DELETE) {
doDelete(form);
} else if (operation == Operation.ADD) {
doAdd(form);
}
Если можно пойти, что далеко у Вас есть своя логика, хорошая и чистая, и можно сделать любой рефакторинг, Вы хотите.
Твердая часть должна объяснить Вашу логику, и можно сделать это на шагах. Не выбирайте шаблон, непока Вы не понимаете точно, какова Ваша проблема.
Жесткая проблема, но типичный для ранней разработки веб-приложения.
Первые вещи сначала, необходимо начать думать, о котором логика составляет настроение деловых кругов, какая логика составляет "поток" (т.е. что видит пользователь), и какая логика получает содержание для того, что он видит.
Вы не должны спускаться по маршруту фабрик и интерфейсов и всего это; реализация обратной силы намного менее полезна..., но бизнес-логика консолидации и логика поиска данных в делегатов некоторого вида... и отъезда действий распорок для определения потока страницы на основе успеха/отказа той логики.
Оттуда просто необходимо занять несколько недель и вымучить его
Если Вы планируете осуществить рефакторинг код, необходимо удостовериться к тестам записи на существующий код сначала, таким образом, можно быть уверены, что Вы не изменили функциональность его, после того как Вы начинаете осуществлять рефакторинг.