Должна ли каждая операция быть одной командой? - PullRequest
0 голосов
/ 14 января 2019

Что я хочу знать:

Должна ли каждая отдельная операция, представленная в списке в фоновом абзаце, быть одной командой? Что делают отдельные команды?


Справочная информация: Мне нужно написать программу, которая запускается из cmd и выполняет операции со строкой, которую вы можете ввести в качестве аргумента командной строки. Вы также должны передать операции, которые будут выполнены как CLA. Например: myprogram.exe / es "Это строка" / ds / rs. Es = ввод строки, ds = отображение строки, rs = обратная строка. Нет необходимости реализовывать Undo / Redo.


Возможные операции:

• Введите строку

• Показать строку

• Обратная строка

• Усилить все буквы

• Строчные все буквы

• Прописные буквы

• Строчные буквы

• Устранить последовательные дубликаты

• Повернуть влево

• Повернуть вправо

• Кодировка длин серий

• Декодирование по длине прогона

• Бросить каждый n-й символ

• Разделить на строки и взять сначала

• Разделить на строки и взять последний


Что я делал / каков мой подход:

После некоторых исследований я осознал, что оптимальным способом реализации этого примера было бы использование Командного шаблона и Цепочки ответственности. Я читаю книгу, написанную «Бандой четырех»: «Шаблоны проектирования». Но я думаю, что не совсем понимаю концепцию. Я знаю, что с помощью шаблона команд есть: Invoker, Receiver, Command, CommandInterface и т. Д. Я знаю, что Invoker (здесь мой класс ProgramHandler.cs) генерирует отдельные команды, оснащает их получателем и действием. И единственная команда вызывает получателя для выполнения действия. Получатель - это класс с именем StringManipulator, который содержит все методы для работы со строкой. Моя идея также заключается в том, что синтаксический анализатор анализирует CLA и «сообщает» ProgramHandler, какие команды необходимо создать.

(Пожалуйста, посмотрите на мой первый подход к дизайну, картинка в конце!)

Но:


Дополнительные вопросы:

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

Это кажется немного неправильным, но с другой стороны: каждая команда нуждается в действии и получателе, поэтому предоставление каждой конкретной команде этих полей по отдельности противоречит «правилам» объектно-ориентированного программирования.

Как это правильно спроектировано?


Диаграмма классов

Диаграмма классов

Спасибо за ваше время и помощь!

С наилучшими пожеланиями!

...