syfisher
TDD infected!!
Command pattern совместно с Composite pattern
Мне нужно реализовать разбиение сложных комманд на серию более простых, которые можно было бы использовать отдельно. По сути это применение Composite к коммандам.
На страницах посвященных этим паттерам комманды обычно трактуются как полностью независимые. Однако на практике это далеко не так. Например, мне нужно сделать валидацию формы, затем сделать пару типовых операций в базу данных (версионных контроль и индексирование), занести данные в логи и проч. Причем, если какие-либо операции не удались, то некоторые команды уже не должны выполняться (индексирование новых записей), а некоторые должны (логи). Получается что зависимости все же есть.
Собственно никакой проблемы особой нет, просто хотелось бы услышать мнения старожилов о том, что делать с зависимостями между этими простыми коммандами. Планирую, что команды будут иметь несколько дочерних элементов(тоже комманд) и свой метод для исполнения. Если свой метод выполняется, что на исполнение будут вызываться дочерние команды, которые уже друг с другом ни как не зависят.
Что-то типа того:
Может у кого есть ссылки на примеры подобных реализаций (можно на java) или свой опыт?
Мне нужно реализовать разбиение сложных комманд на серию более простых, которые можно было бы использовать отдельно. По сути это применение Composite к коммандам.
На страницах посвященных этим паттерам комманды обычно трактуются как полностью независимые. Однако на практике это далеко не так. Например, мне нужно сделать валидацию формы, затем сделать пару типовых операций в базу данных (версионных контроль и индексирование), занести данные в логи и проч. Причем, если какие-либо операции не удались, то некоторые команды уже не должны выполняться (индексирование новых записей), а некоторые должны (логи). Получается что зависимости все же есть.
Собственно никакой проблемы особой нет, просто хотелось бы услышать мнения старожилов о том, что делать с зависимостями между этими простыми коммандами. Планирую, что команды будут иметь несколько дочерних элементов(тоже комманд) и свой метод для исполнения. Если свой метод выполняется, что на исполнение будут вызываться дочерние команды, которые уже друг с другом ни как не зависят.
Что-то типа того:
PHP:
class composite_command
{
protected _child_commands = array();
public function perform()
{
if $this->_do_self_perform()
$this->_perform_child_commands();
}
protected function _do_self_perform()
{
// свой метод исполнения.
}
protected function _perform_child_commands()
{
foreach($this->_child_commands as $command)
$command->perform();
}
}