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