Как спроектировать мои классы так, чтобы они были эффективными и расширяемыми?

StackOverflow https://stackoverflow.com/questions/812409

  •  03-07-2019
  •  | 
  •  

Вопрос

Моё приложение на c ++ SOA имеет концепцию "сеанса" который используется для обмена данными между службами. Например, он используется для проверки законности некоторых операций службы A перед выполнением сеанса B, который фиксирует или откатывает изменения. Безотносительно.

У меня есть 2 типа сеансов: нормальный и что-если. Если пойти дальше, у меня есть другой сеанс, сеанс для законности, сеанс для назначения, сеанс для принятия и т. Д. Это главная проблема. Сеанс легальности может быть что-если или реальным и т. Д.

Как это исправить и избежать дублирования кода?

Я могу создать интерфейс ISessionFactory , чтобы WhatIfFactory и RealFactory реализовали его. Тогда я мог бы создать ILegalitySession и заставить WhatIfLegalitySession и RealLegalitySession реализовать его. Тогда мои фабрики будут возвращать соответствующие объекты.

У этого есть 2 главных проблемы. Что делать, если придет новый режим? Мне нужно будет реализовать новую фабрику и новые классы для всех сессий! Что делать, если приходит новый тип сеанса? Я должен изменить обе фабрики ...

Возможно, подать в отставку из двух иерархий и иметь сеансы whatIf " украшать " реальная сессия? Как я могу локализовать изменения?

Это было полезно?

Решение

Попробуйте реализовать свой WhatIf с помощью декораторов. Или извлеките некоторые специфические части «что, если» для такой стратегии.

Другой вариант - использование шаблона State. Состояние «WhatIf» и «Реальное».

Другие советы

Я думаю, что шаблон декоратора имеет здесь смысл. Возможно, вы захотите взглянуть на шаблон стратегии и его двоюродного брата во время компиляции дизайн на основе политик . Трудно сказать, что лучше без дополнительной информации. Декораторы отлично подходят для добавления дополнительного поведения, два других - для изменения существующего поведения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top