Staram się podzielić swoje myślenie na dwa obszary: przedstawienie rzeczy, którymi próbuję manipulować, i tego, co zamierzam z nimi zrobić.
Kiedy próbuję modelować rzeczy, którymi próbuję manipulować, wymyślam serię oddzielnych definicji przedmiotów - witryna e-commerce będzie miała SKU, produkt, klienta i tak dalej. Będę też miał kilka niematerialnych rzeczy, nad którymi pracuję - zamówienie lub kategorię. Kiedy będę miał wszystkie „rzeczowniki” w systemie, utworzę model domeny, który pokazuje, jak te obiekty są ze sobą powiązane - zamówienie ma klienta i wiele jednostek SKU, wiele jednostek jest zgrupowanych w produkt, i tak na.
Te modele domen można przedstawić jako modele domen UML, diagramy klas i SQL ERD.
Kiedy już ustalę rzeczowniki systemu, przechodzę do czasowników - na przykład operacji, przez które przechodzi każdy z tych elementów, aby zatwierdzić zamówienie. Zwykle całkiem dobrze odwzorowują one przypadki użycia z moich wymagań funkcjonalnych - najłatwiejszym sposobem wyrażenia tych, które znalazłem, są diagramy sekwencji UML, aktywności lub współpracy lub diagramy torów.
Ważne jest, aby myśleć o tym jako o procesie iteracyjnym; Zrobię mały róg domeny, a potem popracuję nad działaniami, a potem wrócę. Najlepiej byłoby, gdyby miał czas na napisanie kodu, aby wypróbować różne rzeczy na bieżąco - nigdy nie chcesz, aby projekt wyprzedzał aplikację. Ten proces jest zwykle okropny, jeśli myślisz, że tworzysz pełną i ostateczną architekturę wszystkiego; tak naprawdę wszystko, co próbujesz zrobić, to ustalić podstawowe fundamenty, którymi zespół będzie się dzielił w miarę rozwoju. W większości tworzysz wspólne słownictwo, które członkowie zespołu mogą używać przy opisywaniu systemu, a nie ustanawiasz prawo określające, jak należy to zrobić.