2008-10-09 1 views
1

Хорошо, у меня есть небольшая программа, в которой теги (как в ID3v2.4 и т. Д.) Некоторые музыкальные файлы. Теперь я хочу, чтобы у пользователя была возможность переместить и/или переименовать те помеченные файлы, если он захочет.Должен ли я просто переместить файл или создать класс, который его перемещает?

Учитывая, что я пытаюсь сохранить достаточно чистый и слабосвязанный дизайн в этой системе (даже если растяжимость не очень важно здесь, это просто весело), ​​вы бы просто позвонить someFileInfoObject.Move(someWhere) где someWhere это применяется шаблон или же его разумно реализовать некоторые классы - возможно, MoveFileStrategy, RenameFileStrategy (я знаю, что перемещение/переименование можно рассматривать как одно и то же в некоторых системах, но я хочу, чтобы они были включены отдельно) - которые определяют место назначения и следует ли применять стратегию, когда вызывается метод Apply(FileInfo file).

Если вы считаете, что некоторые классы стратегии могут быть полезны, есть ли у вас какие-либо предложения по хорошей стратегии реализации?

Как уже говорилось, чрезмерное проектирование на самом деле не является проблемой здесь, потому что это забавный проект, ориентированный главным образом на получение некоторых программных и инженерных практик. :)

ответ

2

Off верхней части моей головы, опираясь на @ С. Лотт, держать команды сами простые и атомные, и создать очередь команд. Команды UI добавляют в очередь, и программа выполняет команды последовательно.

Кроме того, вы можете висеть на (memento) выполненных командах и предоставлять возможность отмены.

2

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

Command 
    CopyCommand 
    RenameCommand 
    MoveCommand 
    DiffCommand 
    CompressCommand 

Это не настоящие стратегии. Это обычные классы с простым методом «выполнить». Вы предоставляете параметры и аргументы через обычных сеттеров. Затем вы выполняете метод.

Это заимствует из шаблона проектирования Ant для задач, которые могут быть подключены.