Я намагаюся розбити своє мислення на дві сфери: подання речей, якими я намагаюся маніпулювати, і те, що я маю з ними робити.
Коли я намагаюся моделювати речі, якими я намагаюся маніпулювати, я придумую серію дискретних визначень товарів - сайт електронної комерції матиме SKU, товар, клієнта тощо. У мене також будуть деякі нематеріальні речі, з якими я працюю - замовлення чи категорія. Як тільки я отримаю всі "іменники" в системі, я зроблю модель домену, яка показує, як ці об'єкти пов'язані між собою - замовлення має замовника та кілька SKU, багато skus згруповано в продукт, і так на.
Ці моделі доменів можуть бути представлені як моделі доменів UML, діаграми класів та SQL ERD.
Після того, як я розібрався з іменниками системи, я переходжу до дієслів, наприклад, операцій, які виконуються кожним із цих елементів для здійснення замовлення. Зазвичай вони досить добре наводяться на використання випадків з моїх функціональних вимог - найпростіший спосіб висловити їх, які я знайшов, - це послідовності UML, діаграми діяльності або діаграми співпраці або схеми плавання.
Важливо думати про це як про повторний процес; Я зроблю невеликий куточок домену, а потім попрацюю над діями, а потім повернусь назад. В ідеалі я встигну написати код, щоб спробувати щось на своєму шляху - ви ніколи не хочете, щоб дизайн зайшов занадто далеко попереду програми. Цей процес, як правило, страшний, якщо ви думаєте, що будуєте повну і остаточну архітектуру для всього; насправді, все, що ви намагаєтеся зробити, це встановити основні основи, якими спільна команда буде поділятись у процесі розвитку. Ви в основному створюєте спільний словник, який члени команди можуть використовувати, коли вони описують систему, а не встановлюєте закон, як це потрібно робити.