If you decide "Program to An Interface" trumps YAGNI and decide to create a supertype where you don't envision anything other than one obvious implementation - is there a convention for naming the obvious concrete type? E.g. this morning I wrote a a class called PlainOldConversionReport and I wonder if that name betrays ignorance of convention. Would there a more normal name, in Object Oriented development generally or .Net or C# specifically, to give to a non specialized subtype of IConversionReport?
Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.
If there is no obvious name for the specialization in the single implementation, my teams have always normally used
Impl as a suffix. If there is an obvious name, I would stick with it even if it will be the only implementation.
For IConversionReport, I'd simply use ConversionReport. I guess you know this already, but IXXXX and XXXX is a bit of a code smell. I think you should probably think a bit harder to see if there's a better name that gives some hint of what the implementation is (or drop the interface if you're neither doing any composition nor swapping out different implementations).
I use a prefix of
I clearly misread the question. My apologies. If there is a simple, bog-standard implementation for the ConversionReport, I'd simply call it ConversionReport or StandardConversionReport and call the SuperType BaseConversionReport (or ConversionReportBase.)