Bueno, llevo un año usando Qi4j en un proyecto. Una vez que se acostumbre al poder de mixins en su modelo de dominio, se estará preguntando cómo se las arregló sin ellos antes. De hecho, creo que el método POJO para crear modelos de dominio debería estar obsoleto. Crea código sistémicamente inmanejable. Debido a que el modelo mixin/composite es la característica importante de Qi4j, en lugar de DI, realmente no hay ninguna comparación en la plataforma Java.
En cuanto a las preocupaciones de Bozho: cuando se trata de declarar mixinas hay dos casos separados. En las entidades, es decir, el modelo de dominio, una interfaz típicamente solo tendrá una implementación, y de hecho querría evitar activamente varias implementaciones por razones de mantenimiento y de legibilidad. Entonces declaro la implementación directamente en la interfaz. Pero, solo es un valor predeterminado, que puede ser anulado por el compuesto si lo desea. Hasta ahora nunca he encontrado la necesidad de hacerlo.
El otro caso es servicios, que es bastante diferente. En muchos casos, habrá una sola implementación, por lo que volver a declarar la implementación en la interfaz está bastante bien. Sin embargo, hay muchos más casos con servicios en los que desea implementaciones diferentes, por lo que en esos casos simplemente declara el mixin en la declaración de tipo compuesto concreto. Entonces ambos estilos son posibles y recomendados por varias razones.
En cuanto a la fundición, ser capaz de lanzar un objeto es una ventaja, no es un problema. Si no tiene un casting de un rol a otro, tendrá que ser muy inventivo para evitarlo, lo que probablemente no simplificará su código.
No he usado Qi4J. Honestamente, no lo entiendo, pero no es la primera vez que Rickard Oberg ha estado muy por delante de mí. Quizás lo asimile dentro de uno o dos años. – duffymo
Acabo de tropezar con Qi4J y después de mirar los ejemplos casi me siento dormido con montones y montones de artefactos que tienes que crear. Además, casi todo lo que demostraron lo he hecho con Scala y/o AspectJ (rasgos, ITD y puntos). Otra promesa para un [GUT] (http: //en.wikipedia.org/wiki/Grand_Unified_Theory) o panacea para resolver todos sus problemas de programación ... –
Qi4j ahora es Apache Zest. http://zest.apache.org –