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

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

+4
источник поделиться
2 ответа

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

+2
источник

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

Лучший вариант, который я знаю для разных языков

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

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

+6
источник

Посмотрите другие вопросы по меткам или Задайте вопрос