[TYPO3-50-general] File name conventions for classes and interfaces

Ingo Renner typo3 at ingo-renner.com
Tue Dec 12 02:58:35 CET 2006


Robert Lemke wrote:

Hi Robert,

> Let's say we have an interface which describes how a "Greeter" class 
> should look like, then we call the interface "Greeter". One 
> implementation of a greeter could be the "HelloWorldGreeter". An 
> alternative implementation would be the "HelloMartinGreeter". Both are 
> greeters and therefore implement the "Greeter" interface.

IMO you can't do this when sticking to OOA/D principals because you need

* some interface (I actually do prefer the I-prefix)
* then you might want to have a very general implementation "Greeter"
* HelloWorldGreeter would extend Greeter and so on

so to have the very general Greeter class you can't use its name for the 
interface and thus have to come up with a different name.

Another advantage of the I-prefix would also be that you automatically 
have all the interfaces together when ordering the files by alphabet...

And again, it is a well established and common practice in f.e. Java and 
C#, and Visual Basic


> Another example: An interface defines the API for a Template Engine, it 
> is therefore called "TemplateEngine". Now we have three implementations:
> 
>   - SmartyTemplateEngine (implements TemplateEngine)
>   - TemplaVoilaTemplateEngine (implements TemplateEngine)
>   - ClassicTemplateEngine (implements TemplateEngine)

This also leads to the same problem, what if you need a very general 
TemplateEngine class, maybe an abstract class?



> Someone wants to enhance the ClassicTemplateEngine by adding the 

"ClassicTemplateEngine" is considered a kind of bad naming in OOA/D,
in this case I would tend to think of TYPO3 4.x's tempalting engine, 
just call it what it is when it is a general templating engine: 
TemplateEngine.


> The question you should always be able to ask is: "Is [Class name] a 
> [Interface name]?" ("Is SmartyTemplateEngine a TemplateEngine?").

Well, as the name SmartyTemplateEngine suggests that it is of the type 
TemplateEngine it would also imply that it implements ITemplateEngine.

> Sometimes you might even want to use interfaces just because you want to 
> be able to ask the previous question - the interface doesn't 
> neccessarily add any new methods. These interfaces are then called 
> "marker interfaces" because the mark your implementation.
> 
> You see what I mean?

I don't understand your last point.
Anyway in general I would suggest to stick with (or copy from) naming 
conventions that have been in place for years - usually for a reason.


greetings from Platteville
Ingo





More information about the TYPO3-project-5_0-general mailing list