I also agree that the I prefix for interface naming is a
positive thing.
Concerning the example you gave about UserManager in the
Java world it is not necessarely a bad thing to name the
interface UserManager but class that implement these
interfaces should have a more concrete name
Therefore UserManagerImp : UserManager is bad naming
convention and could indicate that the name for the
interface is poorly chosen.
Microsoft already covers this issue in quite a bit of
detail. We already have a standard as outlined by MS and
it advises the use of "I".
One would have to present compelling reason beyond
"taste" to throw the standard in the bin.
I dislike the "I" prefix for interfaces; it shouldn't
really matter whether something that is passed by
pointer or reference is an interface or a concrete
class. The only time it matters is when you have a value
class that should be copied rather than referenced.
I prefer to name the interface after the role that it
takes, so "UserManager" is a good name. Calling the
implementation "UserManagerImp" is just poor naming, but
so is having the implementation of "IUserManager" being
called "UserManager". In neither case does it say
anything about what's special about this particular
implementation.
As Gabriel suggests, "ActiveDirectoryUserManager" and
"DatabaseUserManager" are much better names, regardless
whether or not the interface has an "I" prefix.
Regarding the implementation example of UserManagerImp,
how about UserManagerClass or clsUserManager (as some VB
guys do...)? :-)
Cringeworthy...
The specifics of a class implementation of an particular
interface should be contained in the class name, whereas
the interface name should really be about the generic
and common functionality that all the implemented
classes share.