Wednesday, March 19, 2008

Qi4J on the 13th

Supported by the Malaysian Java User Group, the FOSS-SM hosted the March meet-up with the presence of Rickard Oberg on the topic of Composite Oriented Programming in Java using Qi4J.

It's a good occasion to meet Rickard in person and other JUG guys -- Edward, Bernie, KC., ..

Qi4J in short is an implementation of Composited Oriented Programming (COP), an idea heavily influenced by the concept of Domain Driven Development (DDD). You can read more about its background from this page. Aspect Oriented Programming (AOP) and Dependency Injection (DI) are essential parts of Qi4J to achieve DDD (you might want to check Matthew Podwysocki's blog).

In Qi4J, you no longer think about objects but composites. A Composite is a collection of fragments, where a fragment can be a Mixin that holds the state of the composite, a Constraint that validates the usage, a Concern that handles contextual behaviour or a SideEffect that is used for notification. Here are some resources to help you more with it:

I like the general idea personally, just like how I like AOP at the first time I got in touch with it. Clean code, domain centric, separation of concerns, and low coupling between components (that also promotes reusability).

There are some concerns from the ground too, that,

It is Hackish

To some people, the framework looks completely like a hack to achieve something can not be originally done by Java. I beg to differ with that point, programming to me is a lively and creative area of computer science, with a good design and deep thoughts, we are actually leveraging the Java platform to introduce a new programming style. Just like how people use Spring and its applicationContext.xml to do AOP.

Learning Curve and Adoption

Learning curve is a major concern too. The discussion focused on how long it would take for new and old Java programmers to adopt to this new programming style. My opinion is, what truly drives someone to do something to be different from the norm relies on how widespread and the quality of the new concept; as well as how conservative an individual would like to remain, a comfortability issue. Likewise, not everyone uses AOP, ORM, etc. because they do not see the point, accept the idea, or are comfortable with what they are currently doing. But certainly, Spring has a very good documentation and from the way I look at it, Qi4J is going to have one too. :-)

Performance

A realistic concern. I talked to Niclas and Edward (folks from Jayway, the core committers of Qi4J) after meeting. They shared with me that, which is also written in the website, Qi4J is not production ready. The product is still undergoing development and the team has not yet done any performance tuning. Take note that it doesn't even have a binary release at the moment. A more mature codebase should be ready by end of this year.

I am ending this blog entry here. Like I said, I like the idea of it and Qi4J definitely worth revisiting at a later time and since it is an OPS4J project, I will definitely find a time to contribute to the codebase.

Lastly, please visit our JUG's blog for a list of other blogs that discuss about the meeting.

- yc

No comments: