Мы разрабатываем новый компонент и рассматриваем использование шаблона проектирования команд.Шаблон проектирования команд - позволяет различным конкретным командам возвращать разные типы
У нас есть два основных типа команд, которые будут реализовывать наш интерфейс IOurCommand
(из которого наследуются другие команды).
Вопрос заключается в том, что первая команда CommandDoUpdates
не нужно возвращать какое-либо значение, в то время как вторая команда CommandGetData
является извлечение данных, поэтому он должен вернуть List
некоторых объектов (List<DataRow>
)
вещи, которые мы принимая во внимание, чтобы справиться с ситуацией:
- Возврат класса, который будет содержать указание об успехе операции (бонус) и список объектов, которые будут пустой список для всех на
CommandDoUpdates
. - Держите
List
в качестве члена конкретной команды. Потенциальное решение, но делает нашу жизнь труднее по другим причинам (мелкая копия Vs. Deep copy и т. Д.). - То же, что и # 1, но возвратите базовый класс в функцию, и каждый вызывающий calss должен будет придать результат конкретному классу (Down cast не является хорошей практикой, так как клиенту нужно будет знать, что такое фактическое возвращаемое значение).
- Разбиение команды на две разные иерархии (одна, которая возвращает значение, а другая - нет) и использование двух разных ресиверов - мне это действительно не нравится, но это вариант.
This Сообщение хорошее чтение о том, должна ли команда возвращать значение/статус или нет. Это актуально, так как в книге GoF шаблон структуры команды не возвращает значение.
Мои фактические вопросы:
- Можете ли вы придумать лучшего решения?
- Любые плюсы или минусы для вариантов 1,2 и 3, любые профи для варианта 4?
Спасибо!
Командная система у меня есть база 'ICommand', но также и общая' ICommand: ICommand'. _All_ мои команды наследуют от общего интерфейса, даже те, которые возвращают «ничего». Команды, которые ничего не возвращают, используют объект «NoResults» (который не имеет членов) для своих «TResults». До сих пор работала. Поэтому в вашем случае у вас могут быть команды CommandDoUpdates: ICommand и CommandMetData: ICommand <Список > ' –
В одном блоге я нашел интересным, он использует 2 вида команд. Сначала он называется 'Command' с возвратом' void', а второй называется 'Query' с общим возвратом TResult. См. Следующее: http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91 для 'Command' и http://www.cuttingedge.it/blogs/steven/pivot/entry. php? id = 92 для 'Query' – Fendy
Взгляните на ActionResult ASP.NET MVC и его производные. Этот подход работает хорошо и может дать вам некоторое вдохновение. –