I find myself lately implementing the same concept twice, once at a low level and once at a higher level. Let me see if I can explain it...
For example, given the notion of a database, I have one interface (say
IDatabase) with methods like
void AddCompany(Company company);
which is what I consider "low level".
However, there are cases where I need to group a few of these calls (say I'm adding both a company and a user). I don't want to pollute the low level interface / implementation with this method, especially since this method basically only groups a few
IDatabase calls, so I create a new interface. My problem is: what do I call this new interface?
IHighLevelDataAccess just sounds weird.
I have the same problem with, say, remote access. One interface / implementation for the raw calls (one method maps to one web call) and another one for more complex logic (but mostly still doing remote calls).
Is there a naming convention that is expected / recommended in such cases? A design pattern that eludes me?