Re: Design Question
Arne Vajh??j wrote:
And no need to mess around with final or private constructor.
It is pointless but harmless if somebody would inherit or
initialize the class.
Pointless code is harmful by virtue of its pointlessness.
You attached a cost of zero to pointless code, but its cost is larger than
zero. "Pointless" means that it provides no benefit, ergo cost exceeds benefit.
It seems clear that instantiation or (especially) inheritance of a utility
class is pointless, of no benefit. It has a cost in extra code coupling,
reduction in self-documentation, muddier expression of type relationships and
just plain extra stuff to scratch a maintainer's "wtf?" nerve over the life of
the software. The burden is to justify its existence, not the mandate against it.
The existence of code to prevent instantiation and inheritance has a cost. In
context of a conservative coding style that armors against error, the burden
of the cost is shared by the commitment to code safety, but it still is a
small burden to add a private constructor with the aid of a code template.
The benefit is the elimination of the cost of pointless code, and a cleaner
expression of purpose self-documented in the code. Potential abuses of the
type structure will be caught at compile time rather than maintenance time, at
less cost than the latter, and are not deployable.
Synergistically, the habit of such conservatisms creates overall benefit that
is greater than the sum of the incremental benefits, at a cost that is
somewhat less than the simple sum due to learning curve effects and economies
of scale. Small benefits have their place in this scheme. If something is
easy, correct and even a little beneficial on balance, why not include it in
the first place, and in the end reap the greater benefit of a system
comprising well-polished, simplified and correct components?
--
Lew