Я настоятельно рекомендую книгу Эрика Эванса «Управление через домены: решение сложных задач в основе программного обеспечения» . Это ОТЛИЧНАЯ книга, которая учит, как общаться с вашими клиентами, чтобы вы были лучше подготовлены для моделирования их потребностей.
Центральное место в книге занимает концепция повсеместного языка ... языка, который вы, как архитектор программного обеспечения, создаете во время бесед со своими клиентами с помощью инструмента, называемого моделированием.
Как архитектор, есть фундаментальное правило, которое вы должны принять, так как оно очень поможет вам в ваших усилиях по обеспечению ценности бизнеса для ваших клиентов: заказчик не должен полностью удовлетворять ваши требования и аккуратно упакован в красивую коробку, которую можно просто развернуть и собрать. Как посредник между заказчиком и разработчиком, вам важно понимать, что ваша задача - извлекать требования у ваших клиентов.
Почему я так говорю? Ваша роль клиентов - это бизнес, а не разработка программного обеспечения. Они заботятся о том, чтобы заработать деньги, чтобы они могли платить своим сотрудникам, рекламодателям, другим своим счетам ... и, возможно, получать некоторую прибыль в процессе. Их не волнуют детали того, как программное обеспечение ... инструменты, которые они используют для выполнения работы ... работают. Они просто заботятся о том, чтобы инструмент делал то, что ему нужно.
Если вы узнаете, что, как архитектор, одна из ваших ролей - это роль «экстрактора требований», вы станете более успешным. С этим успехом ваши клиенты должны быть счастливее, что должно привести к тому, что вы будете счастливее и более довольны своей работой и программным обеспечением, которое вы и ваши разработчики создаете. Это не легко сделать ... это требует совершенно другого подхода. Это требует большего присутствия ума и дальновидности, которые дают вам понимание потребностей ваших клиентов ... позволяя вам знать, что им нужно, прежде чем они это сделают. Если вы разрабатываете и используете вездесущий язык, а ваш проект продолжается, каждая встреча с вашими клиентами будет улучшаться по мере того, как вы двое научитесь общаться на общих терминах, имеющих четко определенные значения.
Учитывая все это, вот несколько примеров, которые могли бы помочь вам получить более высокие требования ранее:
Cust: Итак, нам нужен
экран ввода заказа , в который мы можем ввести
продукт заказы на.
Arch: Хорошо, это выполнимо. Можете ли вы дать мне больше подробностей об этом
экране ввода заказа ?
Cust: Хм, ну .... я не уверен ...
Arch: Если можно, вот несколько мыслей о бизнес-правилах :
Арка: Есть ли какие-либо ограничения относительно того, что можно заказать?
Cust: О! Да, мы не хотим, чтобы наши клиенты заказывали продукты из класса A , кроме вторника.
Arch: Отлично, это полезно. Вы предлагаете какие-либо комбинированные предложения, чтобы, если клиент заказывает Продукт X, он мог получить Продукт Y со скидкой?
Cust: Хм, не совсем так. У нас есть рекламные предложения , если покупатель вводит определенный промо-код , он может заключить сделку с одним или несколькими продуктами.
Arch: Хорошо, есть ограничения класса и рекламные предложения . Что-нибудь еще, что может повлиять на поведение экрана заказа?
Cust: Хм, теперь, когда вы упомянули это ...
Это распространенный сценарий при выполнении DDD. (Обратите внимание, что это также очень Agile, так как DDD и Agile работают рука об руку.) В приведенном выше диалоговом окне я выделил жирным шрифтом и курсивом термины, которые должны стать частью вас и вашего клиента Ubiquitous Language . Вещи, выделенные жирным шрифтом, - это термины, которые ваш клиент использует для описания определенных вещей в своем бизнесе. Эти термины становятся частью вашей «программной области», которая является программной моделью бизнеса ваших клиентов (по крайней мере, частей, для которых вы пишете программное обеспечение). У меня есть выделенные курсивом термины, которые используют архитекторы и разработчики, например бизнес-правила. Если вы читаете книгу Эвана, он более подробно объясняет, как разрабатывать вездесущий язык и как использовать специальное визуальное моделирование для разработки вашего программного обеспечения, используя термины из этого вездесущего языка.
Надеюсь, это поможет. И, надеюсь, книга «DDD: борьба со сложностями в основе программного обеспечения» поможет еще больше. Конечная цель, как только у вас будет правильное взаимопонимание с вашим клиентом, не будет (или будет очень мало) недоразумений.