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. Second, the statement that DCI complements MVC seems incorrect. You cannot complement the whole with the part. Besides, in essence DCI is nothing, but renaming some of the portions of MVC so that it will look easier from the implementation standpoint. 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)
- 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)
- Hi, Drozenbe,
- I think that Rvalimaki addressed many of your inquiries well, but let me add my slant.
- DCI is a pattern language at least in the sense that Alexander talks about the "pattern languages in our minds," with which I am sure you are familiar, as a composition of several aggregations and local broken symmetries that contribute to a cognitive whole. I am actually writing this up as a pattern language called "Improv Theatre" based, obviously, on a theatre metaphor and the assigning of roles and scripts to actors. It is still in draft and has not yet been published.
- DCI is much more than the renaming of MVC parts. There is a notion of a Model in MVC which is the same as the Data object in DCI. Beyond that, MVC and DCI are different slices of architecture. MVC separates information representation (data) from user interaction. DCI separates system state from system behavior. These are two different slices. It is common for the roles and interactions of DCI to weave through the controller. However, Trygve has shown that you can implement MVC itself by viewing its Model, View and Controller parts as roles that have generic interactions that can be dynamically injected into objects to achieve the desired MVC contracts.
- I am not too much one for finely splitting up the credits for a new idea. Trygve is the inventor of the original concept, but Trygve and I have been working on this together for years and recently have been spending a lot of time face-to-face. I could tell you where I think I contributed, but I'll let Trygve do that. You can ask him (or you could have asked me). If you were to do some homework outside of Wikipedia, you would find that Trygve says: I am deeply indebted to Jim Coplien for his contributions to and interest in DCI. He has for some time now been its prime mover and a valued partner in the hard work needed to advance from theory to practice. (http://heim.ifi.uio.no/~trygver/themes/babyide/babyide-index.html) I think several others deserve credit as well. In general, fights about who invented what are counterproductive and lead to no useful conclusion.
- I think that the author of both DCI and MVC has said that one complements the other, so if you have an issue with that, you can take it up with him. I know that in his "Common Sense" article he says "MVC and DCI are two paradigms that are designed to be shared by me as a programmer and my program as represented in my code" (http://heim.ifi.uio.no/~trygver/2008/commonsense.pdf)
- I think I can show from first principles how DCI reduces just about any meaningful complexity metric you choose to bring to the table, including standards ranging from the Laws of Demeter to cyclomatic complexity. Please show me the justification for your claim that it increases complexity and I can provide a suitable counter subject to my workload.
- You expressed a concern that DCI will lead to people saying that it is a replacement for MVC. In fact, you said it's already happened. Can you give an example? Can you express your deeper concern more precisely and point out what has gone amiss that people jump to this conclusion? I am also puzzled about why you relate that claim to the article that Trygve and I wrote.
- I think some of your concerns could be addressed if you learned a bit about what DCI is. I suggest going to Trygve's website and reading the material there, and then come back to the discussion here. The article is a work in progress and isn't really ready for review comments at this level. If you like, we can let you know when we reach that point.