Hi again,
> Here are several comments to what you are writing - the DCI article. First, if you state that this the pattern language you need to show the patterns it uses. This is missing in this article as well as in the major publication referenced. I have serious concerns that it can be even called the pattern language.
Is it pattern language or architectural pattern? Or both? Anyways, Wikipedia page for "Pattern Language (software development)" is missing, if someone has too much spare time...
> Second, the statement that DCI complements MVC seems incorrect. You cannot complement the whole with the part.
I think MVC (as a pattern) is separating logic from presentation and DCI is separating business logic from domain logic (or model). In other hand, MVC-U is closely related to DCI as a vision or philosophy.
> Besides, in essence DCI is nothing, but renaming some of the portions of MVC so that it will look easier from the implementation standpoint.
I think this is just a misconception.
> In reality, it does not simplify, but complicates both the design and the implementation of the application because it requires to create much more classes or objects. It is something that will never be really used. As the analogy, recall that the relational databases have four normalization levels defined, but nobody really goes that far with real database design. There are always the compromises between the complexity and the responsiveness of the database. The same thing here. The real problem is who is teaching OOD and how far those who teach are from the practices of software engineering.
> Third, I am not sure what the actual contrubution of Jim Coplien into DCI besides multiple speeches and attempts to popularize this concept.
>Fourth, DCI will result and already resulted in unnecessary statements that it replaces MVC which comes from the way the major article from artima.com was written. Drozenbe (talk) 12:50, 25 December 2009 (UTC)
Talk page with my longer response can be seen here:
I also add here my response:
>>Thanks for your input. I had written: "DCI is an architectural pattern", but Jim Coplien changed it to "DCI is a pattern language". I think Cope knew what he did, but I'm still not sure what exactly is a pattern language (in software development) and how it differs from "architectural pattern".
DCI is not part of MVC and it really complements MVC. You should use MVC to separate business/domain logic from presentation even if you use DCI. DCI is separating domain logic from business logic and not doing MVC's job. Therefore DCI is complementing MVC, not replacing it. Both are also made by Reenskaug and both are about users and their mental models and not about "observer"-pattern.
About contribution of Jim Coplien, he is co-author of "new vision" article:
http://www.artima.com/articles/dci_vision.html. Also you can read google group "object composition", where Cope is quite active. Coplien has also contributed to multi paradigm programming and Reenskaug to role modeling, and both can (maybe) be seen as steps towards DCI (as well as other similar concepts by other CS people). All in all, Coplien had read through the article and quite heavily modified it before you did read it.
I think DCI is still lacking complete real world implementation as framework (as DCI&MVC -framework of course). DCI could be maybe seen as a new programming paradigm and therefore it's not so easy to just read couple of DCI articles and then say this or that about how DCI is going to complicate things or not. Reenskaug published MVC on 70's, and now, 20-30 years later MVC is heavily used. (Usually maybe not as MVC-U (as intented), but at least as a architectural pattern / programming trick). Nobody knows if DCI ever breaks through or if it takes another 20 years to do so. That said, I think that DCI is really great concept that brings Use Cases (or algorithms) back to the programming and stops the madness of splitting all the business logic to tiny parts all over the code.
Actually I'm quite pleased to use current generation of web-MVC-frameworks, mainly CakePHP which is a ruby-on-rails clone for PHP, and I don't actually see the benefits of roles in this concept (However, I can see it with more complex desktop apps). Web apps are generally about displaying and manipulating the data that is usually stored on SQL-databases. HTTP is also stateless protocol and you don't have to care that much about the life cycle of objects: Controller gets users input, reads/writes database through Model and brings up View. After that, all is gone, almost nothing to care about. In web apps, there are quite many atomic actions and "direct manipulation of object" thus fitting ordinary OO & MVC -ways very well. Still there are some Use Cases here and there and they are now a bit too much split up.
As soon as I manage to have some time for "research", I'm going to add "C" or Context part from DCI to CakePHP's MVC without adding "I" (Interaction) == roles. I personally dislike fat models anyway (while I'm not writing for example a computer board game or something other as trivial), so my "M" in "MVC" already resembles "D" in "DCI". This way, putting Context (C in DCI, use cases) part into custom Controllers (C in MVC) and doing some simple redirect-magic, I can hopefully turn CakePHP MVC-framework easily into a "MVCC" or "DCCV"(where M is equivalent to D) or "DCV" in short. Rvalimaki (talk) 12:32, 30 December 2009 (UTC)