Scott Thompson wrote:

> I read his articles after you posted your note.  His ideas are 
> certainly extreme and show a marked misunderstanding of the proper way 
> to implement the MVC paradigm.   For some reason he does a reasonable 
> job of explaining that objects are bundles of capabilities (or 
> responsibilities) then completely ignores that fact in presuming that 
> a Model object in an MVC world is simply a bundle of data with a bunch 
> of getter's and setter's.
>
> Sure... if you design your model objects to violate encapsulation then 
> your system is not very Object Oriented (presuming, of course, that 
> you accept encapsulation as a tenet defining Object Oriented-ness).  
> But if your model, view, and controller objects are designed as 
> objects, following the proper definition of object, how could you 
> reasonably make the claim that the system is other than Object Oriented?
>
> There are some valuable ideas in those articles... but some very poor 
> ones as well. 


I haven't finished reading all the articles yet (I'm on the second). 
However, I get the impression that he
doesn't expect the ideas he presents to be used in all general 
contexts.  For example, if you're designing
the standard library for some language, the String class needs to be 
used in many different ways.  However,
the only way to have the string able to visually display itself is to 
couple String with a complete GUI
library.  Each GUI library would have to have its own implementation of 
String which displayed itself
in accord with the components of that library, and Strings from 
different libraries wouldn't be interchangable.
That's not to mention that you might want to either display a string, or 
display something that allows a
string to be inputted (is that a word?).  Thus, giving String visual 
display capabilities isn't really the domain
his advice concerns itself with.

Rather, he's talking about the design of object oriented programs that 
do something.  If you're designing
a chess game, and have a Knight class, there's no reason to make that 
class interchangable with a
Knight class from a fantasy role-playing game.  Thus, you know how the 
Knight class will represent
itself in that context, and can make it specific to its intened context.

As another example, suppose you're desgning a text editor.  You could 
have a text area that the
user enters stuff into, and then the program queries the text editor for 
the underlying String and does
things with it.  However, this isn't very object oriented (he'd argue).  
You're using objects, but it's
not much different from

str = gets
result = process(str)
puts result

Which isn't really object oriented at all.  What you really want is a 
Text class that knows not only
how to display itself as a text area and accept user input, but knows 
how to do everything that
your specific program might want to do with text.  It's the difference 
between:

str = text_area.underlying_string
str.gsub(/blah/, "")
text_area.underlying_string = str

and:

text_area.delete_word "blah"

Since you're writing the class for text_area, you know you'll need it.

As a nice summary, I'd say he's talking more about implementing object 
oriented applications, and
less about writing frameworks with which object oriented applications 
will be built, if that makes any
sense.

I could be totally off, I suppose, as I'm sure Holub is much more 
experienced than I am.  However,
I can't agree with many of his assertions unless I take them in the 
light I discussed above.  His
ideas don't make sense in many cases if you're trying to write general, 
reusable, interchangable
libraries.

Somebody shoot me down if I'm wrong.

- Dan