Reputation: 6361
I'm working on a proposal and prototype for a re-architecture of a complex system. It's an n-Tier distributed architecture that broadly follows the principles of DDD and has elements of Jeffery Palermo's Onion Architecture, especially the separation of the core concept of Domain Model/Services (these would be closely related to domain problems and some may ultimately be naturally implemented as remote WCF/Workflow services) from the higher-level concept of Application Model/Services (components which would typically be coordinating actions on behalf of application/UI code, and would be injected as dependencies in those applications).
I need to communicate this approach to executives and/or developers who have not been heavily exposed to service oriented architectures, SOLID principles, dependency injection, composite applications, etc. I'm encountering some significant resistance to the concept of an "Application Service" not being implemented as a WCF or "Web" service.
To me, "services" are simply components that implement some kind of "service contract" that "service consumer" and "service provider" can agree upon abstractly, and this does not imply that it's necessarily a "web service", listening on a port on some server. It seems that I simply can't get this point across, however - it seems too subtle or too abstract.
I think I just need another term for "Application Service" to distinguish it from "Web Service", but "API" or "SDK" or "Helper class" or similar terms that are well understood by my audience are either not accurate or don't seem to adequately describe the notion.
Any suggestions on what would be an good alternative term?
UPDATE: I've been reading recently about MVVM + Controller (MVVMC or MVCVM), and was beginning to think that perhaps some of our Application Service operations could really be considered to be Controllers. It's still not clear to me how validation (ie IDataErrorInfo) implementation would work in this world, though - would all business logic and validation be handled by the "Controller", possibly raising an event similar to (or in fact the same as) INotifyPropertyChanged.PropertyChanged?
Upvotes: 2
Views: 1213
Reputation: 173
So the question is what's another term for "Application Service" to distinguish it from "Web Service": What about "Business Service"? or "Domain Service"?
Upvotes: 1
Reputation: 14072
Uncle Bob uses the term Interactors in his Clean Architecture approach. They are more or less equivalent to application services. Use Cases are another alternative.
When it comes to developers, Service is often used as a convenient umbrella term to describe pretty much anything stateless that exposes operations, often because people don't bother finding a better name. It's a shame, but I can't see what you can do about it. Using another word for application services with your developers will just reinforce their illusion that service == remote service temporarily - sooner or later, they'll discover the whole world thinks otherwise.
Upvotes: 2