Reputation: 60957
A little background: We're building a library/framework for working with scientific models. We have an interface Model
which defines the operations that a model must implement, which is pretty minimal. That is: the Model
interface defines the contract of a model from the point of view of a model implementor.
The framework adds a bunch of other functionality around the model, but right now client code has to access that functionality by using a bunch of other classes, such as ModelInfo
, ModelHost
, ModelInstance
, etc.
In our application that uses this framework, we don't want to actually have to deal with all this mechanism of running models, etc. So we've decided to use the façade pattern to wrap up the framework functionality in an easy-to-use object. (We've already applied this pattern to other parts of the framework, with good success.)
Here is the question: given that we already have an interface Model
, what would be a good name for the façade class? The Model
interface is the contract between the framework and the model implementation, and the new class will define the contract between the framework and the client application.
Or, more generally: when we have an abstraction provided by a library or framework, how can we name the "two sides" of the abstraction so as to clearly identify the "provider" and "consumer" interfaces to the abstraction?
(If it matters, for this project we're using Java 6.)
Upvotes: 26
Views: 12762
Reputation: 1624
Sounds like ModelInfo, ModelHost, and ModelInstance should all be members of Model.
See https://softwareengineering.stackexchange.com/questions/316840/is-it-bad-practice-to-name-a-class-with-a-facade-suffix for why you generally shouldn't name classes with the specific implementation used. Basically, some day you may want to use a different implementation of Model, which happens to not be a facade.
Upvotes: 1
Reputation: 60957
In discussions within our team, another option has been proposed: we can rename the existing Model
interface to something else, and just call the new façade Model
. In fact, they can both be called Model
right now, because they will live in separate packages. (Although I'm not a fan of identically-named classes in different namespaces.)
Upvotes: 2
Reputation: 128829
How about *Provider and *Consumer? I think you said it yourself in your question. Perhaps *Producer and *Consumer is a better match?
Upvotes: 3
Reputation: 15390
PureMVC uses a singleton named ApplicationFacade
and registers all the models with methods like registerProxy
which are defined in IFacade
Upvotes: 0
Reputation: 39480
I know this seems trite, but... have you considered using "ModelFacade
" as the class name for the facade class? I think with documentation that indicates that the interface was already named Model
, it seems relatively straightforward, and makes it very clear which design pattern you're using.
Upvotes: 16