I try to break my thinking into two areas: the representation of the things that I am trying to manipulate, and what I intend to do with them.
When I try to simulate the material that I am trying to manipulate, I come up with a series of separate element definitions - on the e-commerce site there will be SKU, product, client, etc. I will also have some intangible things that I work with - an order or a category. As soon as I have all the "nouns" in the system, I will make a domain model that shows how these objects are related to each other - the order has a customer and several SKUs, many skus are grouped into a product, and therefore on.
These domain models can be represented as UML domain models, class diagrams, and SQL ERDs.
As soon as I have nouns, I move on to verbs, for example, to operations that each of these elements go through to complete an order. As a rule, they are very well suited for use from my functional requirements - the easiest way to express them, which I found, are UML sequence diagrams, activity or collaboration diagrams or swimming map diagrams.
It is important to think of it as an iterative process; I will make a small corner of the domain, and then work on the actions, and then come back. Ideally, I will have time to write code to try something like that, because you never want the design too far ahead of the application. This process is usually terrible if you think you are building a complete and final architecture for everything; indeed, all you are trying to do is to establish the basic foundations that the team will share when moving through development. You basically create a common vocabulary for team members to use, describing the system, rather than setting a law on how this should be done.
Tim Howland Nov 15 '08 at 15:15 2008-11-15 15:15
source share