[Newbies] Accessors for everything?

Claus Kick claus_kick at web.de
Tue Jan 6 15:20:14 UTC 2009


David Mitchell wrote:
> I've seen both.
> 
> I try to avoid creating accessors and only add them as I need. I try to
> create methods based on the responsibilities of the object and not around
> its data structure.
> 
> But, I've worked on projects where every object had accessors for every
> variable (often necessitated by the persistence framework). You have to
> trust the programmers not to abuse them as a simple data structure.
> 
> Kent Beck's Smalltalk Best Practice Patterns describes the forces behind
> each approach.
> 
> Another reason to use accessors is lazy initialization.
> 
I think this is actually the best reason:

myVar

"return state of myVar. if nil, initialize with default value"

myVar isNil ifTrue:[myVar := myClass defaultValue].
^myVar

If you have to pay attention to variable initialisation, you have to do 
it somewhere.
So, if you have your own domain model objects, you can do it in 
#initialize (or #new, if you are adventurous).

If you do not have classes for your own objects, i.e. if your instance 
variables are Strings/Collections/whatever, then you have to do it 
somewhere else, but where? In #new or #initialize of the class 
containing the instance variables? Or even in a factory method?

That can lead to a lot of code, hence confusion.

Personally, I favour lazy initalisation, due to the pseudo-encapsulation 
(if I may misuse the term here) it offers (whatever the variable is, it 
will have a meaningful value after accessing it the first time) but that 
is just my opinion.

Claus


More information about the Beginners mailing list