From my POV there are two approaches which I would call analytical
and synthetical
(coming from 18th century philosophy) or perhaps more modern: top-down
and bottom up
. I find the former terms more describing because they indicate what you are doing: Analyzing things vs. putting things together.
I) The Analytical Way
When you enter your domain you have some understanding of what is going on. Say you are doing e-commerce you are dealing with Customers
, Orders
, Products
etc.
what recommendations should be followed in order to produce an accurate conceptual Domain Model?
Coming down this road, the answer is
Getting to know your business domain
This is called analytical for just that reason of analyzing first and code second.
II) The Synthetical Way
If you have the luck I have and use a language which supports multiple paradigms (like Python) in my case, you could leverage that in order to avoid the question about objects (and modules etc.) at first. This way you build from the bottom up bit by bit - or as it is called you synthesize (group things together and group the groups) etc.
Generally speaking OOP
is about data and behavior and grouping data and according behavior together (there are the three pillars which from my perspective come later).
But when starting the project most of the time you do not know how to group your data. Of course - as mentioned above - there are the "easy parts" of having an order
.
Languages like Python allow you to postpone the question of what classes are needed and how they should look like to a later point. You start with the basic builtins and write some functions and group them later to modules which may become eventually classes. But sometimes you only see that you need a function.
The longer you work on the project, you realize which data "attracts" which behaviour so to say. If you have a bunch of functions every dealing with the same kind of data: Think of a class and clean up your code.
what recommendations should be followed in order to produce an accurate conceptual Domain Model?
The answer here is:
Start without any notion of objects
at all and look for "attraction" of data and behaviour during the project.
I prefer the latter one. It let's me starting my work earlier.
But to do both ways in a reasonable way, you have to have (built up) experience.
Besides: I would substitute the term accurate
with viable
. You should model something which works. That may be inaccurate but accurate enough for the moment.