-2

Only in the past 3 years I got in contact with enterprise architecture and its terminology. The more I read about it the more I was confused about the term "service" that appears to have a multitude of meanings.

For example in the context of Domain-Driven Design (DDD) there are domain services, application services and infrastructure services. There is the term service layer and, of course, there is Service-Oriented Architecture and microservices.

What I keep wondering about is which of these terms describe intersecting concepts and which do not. Are the services from DDD part of (a) service layer(s) or does the term service layer only apply if it necessarily provides access to some sort of networking client? Does the term "service" in service layer, SOA und microservices refer to this same aforementioned concept or is one a subset of the other?

Update

I am quite certain now that the way I asked this question makes it easy to misunderstand it. It was never supposed to be a general question about the term "service" but about the relation between the given terms in the second paragraph (e.g. Which ones do intersect? Which one is (or could be) a subset of the other? What level of abstraction do these concepts belong to? Are there potentially is-a relationships among these concepts? etc.)

Update 2

This SE answer and this blog post answer my question.

Antimon
  • 542
  • 4
  • 9
  • A service is something a client uses. The demarcation is found in the adjectives that aren't the word service. A domain service is demarcated by the domain. Same as a domain client would be. It's like you're asking us to define what color is but insisting we only use skittles to talk about it – candied_orange Mar 29 '18 at 01:08
  • Yep, I am quite certain now that the way I asked this question makes it easy to misunderstand it. It was never supposed to be a general question about the term "service" but about the relation between the given terms in the second paragraph (e.g. Which ones do intersect? Which one is a subset of the other? What level of abstraction do these concepts belong to? Are there potentially is-a relationships among these concepts? etc.) – Antimon Mar 29 '18 at 08:07
  • Have you read this [definition](https://en.m.wikipedia.org/wiki/Service_(systems_architecture))? – Laiv Mar 29 '18 at 11:27
  • @Laiv: That definition seems really vague. – Robert Harvey Mar 29 '18 at 15:29
  • @RobertHarvey Even the [dictionary definition](https://en.oxforddictionaries.com/definition/service) of service is vague. – Laiv Mar 29 '18 at 15:49
  • 1
    @Laiv: Definition 2: *A system supplying a public need such as transport, communications, or utilities such as electricity and water.* This is what happens when programmers get obsessed with vocabulary precision. Sometimes, there isn't any such precision. Welcome to the English language. – Robert Harvey Mar 29 '18 at 17:31
  • @Laiv: Yep, I’ve read it. I think I will still keep reading about enterprise architecture and look for some reference implementations that give me hints about what of these parts are different names for the same thing and which are not. I still do not know if a web service layer implementation is ever more than a couple of classes that delegate to methods in the (DDD) application layer or if it might even implement business rules itself (…and violate the SRP). But again, my initial question was apparently not clear enough. – Antimon Mar 29 '18 at 21:11
  • I thinkn services have no business in DDD. Not in the sense of domain logic. – Laiv Mar 29 '18 at 21:41
  • As a final remark I want to share a blog post that partially addresses my question: http://gorodinski.com/blog/2012/04/14/services-in-domain-driven-design-ddd/ Thank you everyone for your responses. – Antimon Mar 30 '18 at 14:21

2 Answers2

3

The fundamental meaning of the word "service," as it pertains specifically to Software Engineering contexts, is the same meaning as the word "service" when applied to any other context:

A system supplying a public need, such as transport, communications, or utilities such as electricity and water.

All services (including public utility and computing services) have some common characteristics and considerations:

  • Access Controls
  • Billing
  • Capacity
  • Interfaces
  • Maintenance
  • Metering
  • Quality of Service
  • Regulation
  • Resources

And so on.

In the case of a computing service, the public need is often data, but it can also be storage, infrastructure, application, processing or computational resources.

Robert Harvey
  • 198,589
  • 55
  • 464
  • 673
  • Thank you for taking the time to respond but your answer completely ignores the context of my question given in the main text. – Antimon Mar 28 '18 at 21:42
  • Which is what, exactly? The meaning of "service" does not change at all among the different computing contexts. A service is a service. It "serves" things. – Robert Harvey Mar 28 '18 at 21:49
  • A "domain service" as introduced in the book Domain-Driven Design is something completely different than a "web service". These two things describe totally different concepts; one on the architecture level, the other on a system level. I'm asking for a demarcation of these terms. If my question’s title is misleading, I can try and find a better one. – Antimon Mar 28 '18 at 21:57
  • So you're looking for comprehensive definitions for all possible permutations of the word "service" in a computing context? That kind of question is almost certainly Too Broad here. – Robert Harvey Mar 28 '18 at 21:59
  • 2
    And I stand by my assertion that, in the general case, there isn't any distinction; a service is a service. – Robert Harvey Mar 28 '18 at 22:00
  • 2
    In few words. Regarding DDD, `domain, application and infrastructure`just denote the level (boundary or scope) the service operates at. Regardless the level, they all have the very same purpose; to serve data (or access) to the boundary (scope) they are serving to. What a boundary or scope means, I think Robert already introduced some examples. Ín Microservices, services denote business capabilities of the company (Customer service, Sales, Shipping, HR, Tracking, Notifications, Security, etc). – Laiv Mar 29 '18 at 07:21
  • 1
    In Microservice we call each of these elements "services" but they could be rightfully called _applications_ – Laiv Mar 29 '18 at 07:25
1

While I agree with @RobertHarvey, I think I also understand what the OP is looking for. I think the simplest way to describe it is thusly:

A DDD service provides a cross-cutting capability within a given piece of software.

A networked service (eg web service) is itself a piece of software which provides cross-cutting capability to other pieces of software.

Note that a DDD service could easily be a facade for an application to access a networked service.

Paul
  • 3,277
  • 1
  • 17
  • 16