[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