I have really enjoyed reading things on the Qi4j list. I am fairly new to Qi4j, having discovered it while working on my MS project. I am not a very experienced developer, so while I have not contributed to the list or to the Qi4j project yet, I have tried to soak up as much as I can. I am thinking that some of my naivete might be useful in this discussion.
I think Qi4j is the best thing that has happened to Java since Java got interfaces. I am a systems thinker and have trouble keeping complicated algorithms straight in my head. So as I learned how to program, I gravitated toward OOD, then role-based design using interfaces, and eventually to DDD. I made it through (most of) Eric Evan's book. DCI introduces the idea of context and interaction. Taking the idea of DDD and (mis)applying to the "software application" domain makes it easy to understand CQRS and Event Sourcing. All of this makes sense to me because it models the world and results in simple code that is easy to maintain. A couple years ago (before I discovered Qi4j) I implemented a simple CQRS framework for a job assignment (learning basic ideas from Udi Dahan and Greg Young). As I built up a domain model using roles, the domain classes got bigger and bigger as they had more roles to implement. I kept wishing there was a way to share the "Describable" role implementation (among others), so I didn't have to implement it for every class that played that role. I stumbled on the Qi4j website in the course of some research. My first impression of the project was that it was an extremist approach to software development, like XP is to software methodology. But I decided to look into it more and discovered, instead of an extreme approach, that Qi4j solves a fundamental problem with OOD. Yes, the runtime and assembly take a little getting used to, although application assembly is simpler (and MUCH more powerful) than Spring's XML configuration. Mixins fixed the role implementation problem that I mentioned before. Concerns, Constraints, and SideEffects make AOP much simpler to implement, and add semantic intent to the code. (BTW, Rickard et al., the Command/Query HATEOAS web interface in Streamflow is awesome. In the CQRS framework mentioned previously, I used an MVC web architecture that created a command in a controller method and sent it to the system. I never thought of extending commands and queries into the web interface and tying everything together with hypertext. Although, +1 for pluggable JSON serialization for Value objects in Qi4j 2.0) I see Qi4j as an information system platform. It is more than a framework. It seems especially geared for intelligent information systems, rather than unintelligent, anemic information systems. Qi4j with DCI seems like a good approach for most intelligent systems. Many of my fellow students seem caught up in Ruby or .NET hype. When I talk to them about the awesomeness of designing with roles, I usually get blank stares (I've never had a software development job outside of a university setting, so I don't know how it is in the "real world" :) ). Many of them learn languages but don't learn patterns. I think the patterns are more important than the implementation language. Patterns solve problems. Qi4j is a pattern language that makes it easier to create intelligent software systems. One of the greatest strengths of Qi4j is that it makes it easier to implement complicated patterns. Thank you! FYI, my master's project (built on Qi4j) includes building a collaborative system for historical and genealogical research. Conclusions are built up by extracting bits of information from original source documents. Kind of like case management with a few twists. Qi4j has made development much more manageable and enjoyable. I am surprised sometimes with what Qi4j can do. Thanks, Chris Chapman _______________________________________________ qi4j-dev mailing list [email protected] http://lists.ops4j.org/mailman/listinfo/qi4j-dev

