Каковы возможные проекты для архитектуры DCI? - PullRequest
4 голосов
/ 05 апреля 2010

Каковы возможные варианты реализации архитектуры DCI (данных, контекстов, взаимодействий) на разных языках ООП? Я думал о разработке на основе политик (Андрей Александреску) для C ++, DI и AOP для Java. Тем не менее, я также подумал об использовании шаблона проектирования State для представления ролей и некоторого метода Template для взаимодействий ... Каковы другие возможности?

Ответы [ 2 ]

6 голосов
/ 14 марта 2012

Выполнение чистого DCI является трудной задачей для большинства языков, с которыми вы обычно сталкиваетесь в одной из двух проблем. Языки со статической типизацией, такие как Java, обычно заканчиваются неким решением-оболочкой, которое создает проблему self schizofrenia . Динамические языки, которые позволяют присоединять новые методы экземпляров по желанию во время выполнения, часто страдают от проблемы с областями видимости. RoleMethods по-прежнему доступны, когда объект больше не играет роли.

Лучше всего подходит для разных языков

  • Марвин: Дизайн для DCI и как таковой имеет полную поддержку
  • Руби с помощью Maroon. Если вы используете maroon gem (или аналогичный), то в Ruby есть полная поддержка DCI.
  • Java: Qi4J
  • C # Методы расширения (проблема определения объема и проблема перегрузки), возможно, вместе с динамическим. У меня была реализация на основе Clay, но это создает проблему идентичности
  • Native Ruby: внедрение метода. Проблема с областью видимости, когда методы недоступны, когда объект больше не играет роли
  • C ++: шаблоны. Срок службы метода определения объема совпадает со сроком службы объекта

если вы посмотрите на fullOO , вы найдете примеры на нескольких языках. Включая в свой собственный проект Marvin, язык, специально разработанный для поддержки DCI. В настоящее время большая часть языка Marvin идентична C #, поэтому можно сказать, что это расширение C # больше, чем собственный язык.

2 голосов
/ 29 апреля 2010

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

...