Skip to main content

You are not logged in. Your edit will be placed in a queue until it is peer reviewed.

We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.

Required fields*

9
  • 1
    I disagree with every one of your points here, the most with your first point: "you need to separate concerns: the domain is not the application...The application just provides functionality...". "Just"? The application's main purpose is to provide that functionality. This can not be an afterthought. There can be no model independent of how it's used. Separating the concern to provide useful functionality from its data is about the worst thing one can do. Commented Aug 26, 2020 at 11:01
  • 1
    @RobertBräutigam Let’s clarify: the application adresses several concerns, such as presenting, business logic, and persistence. Decomposing these in different layers (or cores, depending on the architectural layer) makes only sense with the right focus. Moreover (at least in my area) same domains are often shared by several applications, each specialized on some tasks. The issue I see everyday is that sometimes people build specialized domain that inappropriately represents what it’s supposed to represent, and that are difficult to upgrade because completely coupled with application logic. Commented Aug 26, 2020 at 12:05
  • 1
    @RobertBräutigam This being said, it’s your right to disagree and DV, and I appreciate the opportunity for clarifications, but it would be more constructive to provide your own answer so that we can see if there is at least some common ground (or if just must disagree as strongly as you) ;-) Commented Aug 26, 2020 at 12:13
  • 1
    I only know the usual "business applications" (banks, retail, utilities, etc), so there might be areas I haven't experienced where the above is needed. However, even in DDD which you cite, "bounded contexts" are introduced exactly for the reason not to share "domains". Also, as mentioned, I don't want to address "presenting, logic, persistence" separately, because they are closely related and coupled, i.e mostly change together. The Layered Architecture makes applications less maintainable. Commented Aug 26, 2020 at 12:32
  • 1
    @RobertBräutigam Bounded context are not meant to keep domains private to applications, but to separate distinct domains. If you have a warehouse domain, some applications may deal with inventories, other with picking items, still other with optimizing physical movements, some for controlling warehouse robots. It’s all about pallets, materials, storage locations and incoming and outgoing deliveries. If you decide up-front to have 1 domain per application, you have decided up-front on the architecture, not necessarily the leanest one. Commented Aug 26, 2020 at 13:09