Каковы возможные проекты для архитектуры DCI?

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам