title: Is Model-View-Controller Poor Object-Oriented Design?
body: <p>Both OOD (Object-Oriented-Design) and MVC (Model-View-Controller) architectures have become staples of modern software design.  Yet, I have recently had an interesting discussion regarding how MVC architectures utilize (and possilby even <em>violate</em>) OOD principles.  This possibility is actually rather intriguing since both OOD and MVC are intended to achieve many of the same goals: separation-of-concerns and software re-usability.  But the question I pose: <strong>Are these two design strategies in direct conflict with each-other?</strong>  As I have used both, in practice, I am beginning to think: quite possibly yes.</p>
  
  <p>I say so because: Enforcing a strict separate between models, views and controllers often results in architectures where models are implemented as dumb <em>containers</em> that can only be manipulated via external controllers.  I argue this directly conflicts one of the chief principles of object-oriented design: where objects contain operations that perform necessary operations and encapsulate them as necessary.  For example, in a pure Object-Oriented architecture a hypothetical <code>File</code> class would contain methods such as <code>open()</code> and <code>save()</code>.  MVC suggests that we have two classes <code>File</code> and <code>FileManager</code> (such that the later contains the <code>open()</code> and <code>save()</code> methods).  To me: the MVC design is rather messy.  If ones needs to create a more specialized type of <code>File</code> (say for handling Files that stream across a network on <code>open()</code> or <code>save()</code>), one only needs to sub-class <code>File</code> with a class called (let's say): <code>StreamedFile</code>.  With MVC, you'd have to either create another manager class or complicate the design of the original manager class.</p>
  
  <p>From this, <strong>it follows that in a more complex system MVC could have disastrous effects on both separation of concerns and code re-usability.  Or Not?  Perhaps MVC patterns could be implemented without breaking OOD principles?  Or Is MVC an inherently flawed approach that makes it difficult to implement software systems with loosely coupled components?</strong>      </p>