Стратегии для шаблона Команда
От: Аноним  
Дата: 14.04.11 12:31
Оценка:
на несоклько тем выше (менеджер задач) я описывал гипотетическую задачу по многозадачности (http://rsdn.ru/forum/design/4233224.1.aspx
Автор:
Дата: 14.04.11
)
в ней используется шаблон Команда с несколькими надстройками:
1. синхронно/асинхронно (в отдельном потоке или в текущем).
2. поддержка отката.
3. прогресс выполнения.

Хотелось бы отдельно обсудить реализацию.
1. хотелось бы узнать, кто как реализует команды (интерфейс отката назад).
в примере из ГоФ используется флаг IsUndoable(), и метод Undo(), еще есть вариант при выполнении команды возвращать команду, которая делает откат (или возвращать 0), так же можно использовать стратегии. Или можно содать несколько интерфейсов и кастить их
// пример 1. происходит захламление, т.к. появляется 2 лишних метода там, где опция не поддерживается
class ICommand
{
public:
  virtual void Execute() = 0;
  virtual void IsUndoable() const = 0;
  virtual void UnExecute() = 0;

};

// пример 2. Неплохой вариант в виду того, что все равно обратная функция понадобится в работе.
class ICommand
{
public:
  virtual ICommand *Execute() = 0;

};

// пример 3.
Пока не придумал ничего. думаю, что это будет пример 1, в котором результаты методов зависят от стратегии


пример 4. В таком случае нужно постоянно кастить объект, что равноценно примеру 1, только с "чистым" списком методов класса
class ICommand
{
public:
  virtual void Execute() = 0;

};
class IUndoable
{
public:
  virtual void Undo() = 0;

};
class MyCommand: public ICommand, public  IUndoable
{
...
};


Какие варианты используете вы?
Re: Стратегии для шаблона Команда
От: Sinix  
Дата: 14.04.11 13:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Какие варианты используете вы?

TPL + (опционально) RX. Я бы на вашем месте отошёл бы от баззвордов паттернов и перешёл бы в реальной проблеме и готовым фреймворкам. Тем более, что на ваше решение можно натянуть UoW и transaction script.
Re[2]: Стратегии для шаблона Команда
От: Аноним  
Дата: 14.04.11 13:19
Оценка:
А>>Какие варианты используете вы?
S>TPL + (опционально) RX. Я бы на вашем месте отошёл бы от баззвордов паттернов и перешёл бы в реальной проблеме и готовым фреймворкам. Тем более, что на ваше решение можно натянуть UoW и transaction script.
а можно подробнее про TPL, RX. что это такое?
Какой взять готовый фреймворк для с++?

Самое готовое из всего, что нашел — буст. Qt не подходит. Более высокоуровневый фреймворк я не нашел.
Re[3]: Стратегии для шаблона Команда
От: Sinix  
Дата: 14.04.11 14:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а можно подробнее про TPL, RX. что это такое?

А это всё для дотнета. Код проглядел мельком и почему-то решил, что тема ближе к яваистам/дотнетчикам

А>Какой взять готовый фреймворк для с++?

По-моему, лучше спросить в профильном разделе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.