private vs protected in Interfaces

Ali Çehreli acehreli at yahoo.com
Sun Aug 15 02:01:44 PDT 2010


Jonathan M Davis wrote:

>  It would not be good to be unable to do NVI.

I am not saying that it should not be supported; but...

I've used NVI a number of times myself until I was convinced by Kevlin 
Henney that it was "a solution in search of a problem" during one of his 
many excellent presentations at the Silicon Valley ACCU:

   http://www.accu-usa.org/Slides/ACriticalViewOfCppPractices.pdf

A couple of slides can't convey his thoughts, but here they are:

<quote slide="27">
Non-virtual Interfaces?

NVI suggests virtuals should be private and wrapped in public
non-virtuals

  Over the last decade or so this has been proposed by some as a
  good practice guideline

  It has structural similarities with Template Method, but has a
  distinct form and (in)distinct motivation

However, it is a solution in search of a problem

  On close inspection the problems it purports to resolve are
  better addressed by other more mature and proven techniques,
  e.g. the Interceptor pattern
</quote>

<quote slide="28">
Non-Valuable Idiom

NVI lacks either a clear motivation or a clear description of
benefits

  Motivation is often presented in terms of shotgun speculation —
  code simplification, instrumentation, extensibility, decoupling,
  thread safety, assertion checking, etc. — that does not stand up
  to scrutiny

NVI singularly fails to adequately offer the benefits that are
advertised as its motivation

  In practice it is a somewhat tedious and verbose technique that
  adds baggage to a class hierarchy
</quote>

Ali


More information about the Digitalmars-d mailing list