Ich versuche, mein Denken in zwei Bereiche zu unterteilen: eine Darstellung der Dinge, die ich manipulieren möchte, und was ich damit vorhabe.
Wenn ich versuche, die Dinge zu modellieren, die ich manipulieren möchte, habe ich eine Reihe diskreter Artikeldefinitionen - eine E-Commerce-Website enthält eine SKU, ein Produkt, einen Kunden usw. Ich werde auch einige immaterielle Dinge haben, mit denen ich arbeite - eine Bestellung oder eine Kategorie. Sobald ich alle "Substantive" im System habe, erstelle ich ein Domänenmodell, das zeigt, wie diese Objekte miteinander in Beziehung stehen. Eine Bestellung hat einen Kunden und mehrere SKUs, viele Skus sind zu einem Produkt zusammengefasst und so weiter auf.
Diese Domänenmodelle können als UML-Domänenmodelle, Klassendiagramme und SQL-ERDs dargestellt werden.
Sobald ich die Substantive des Systems herausgefunden habe, gehe ich zu den Verben über, zum Beispiel zu den Operationen, die jedes dieser Elemente durchläuft, um eine Bestellung zu erstellen. Diese lassen sich normalerweise recht gut auf Anwendungsfälle aus meinen funktionalen Anforderungen abbilden. Der einfachste Weg, diese auszudrücken, sind UML-Sequenz-, Aktivitäts- oder Kollaborationsdiagramme oder Swimlane-Diagramme.
Es ist wichtig, dies als einen iterativen Prozess zu betrachten. Ich mache eine kleine Ecke der Domain, arbeite dann an den Aktionen und gehe dann zurück. Im Idealfall habe ich Zeit, Code zu schreiben, um Dinge auszuprobieren, während ich fortfahre. Sie möchten nie, dass das Design der Anwendung zu weit voraus ist. Dieser Prozess ist normalerweise schrecklich, wenn Sie denken, dass Sie die vollständige und endgültige Architektur für alles erstellen. Alles, was Sie versuchen, ist, die grundlegenden Grundlagen zu schaffen, die das Team im Verlauf der Entwicklung gemeinsam nutzen wird. Sie erstellen meistens ein gemeinsames Vokabular, das die Teammitglieder verwenden können, wenn sie das System beschreiben, und legen nicht das Gesetz fest, wie es gemacht werden muss.