Подтвердить что ты не робот

Можно ли использовать DDD и BDD вместе?

Мне нравится промежуточная разработка, которая достигается с помощью DDD. Разработка зависит от домена, самой прочной части приложения. Мы не зависим от инфраструктуры, настойчивости и представления. Это звучит неплохо. Но это не имеет значения для бизнеса.

Здесь представлен бизнес-ориентированный BDD с внешним развитием. У нас нет предварительного дизайна домена (выбор объектов, объектов значений, агрегатов). Мы берем пользовательскую историю, записываем некоторые сценарии и реализуем их один за другим. Мы начинаем разработку с самой изменчивой части приложения - от презентации. Я ненавижу писать хрупкие приемочные тесты. Вы?

Итак, если у кого-то есть успешные истории о применении DDD в стиле BDD, пожалуйста, поделитесь со мной:)

  • Вы пишете эти хрупкие тесты для презентации?
  • Есть ли у вас некоторый дизайн перед созданием части домена для пользовательской истории, которая реализована? Или вы рефакторируете шаблоны DDD после реализации истории?

Любая помощь будет оценена. Спасибо!

4b9b3361

Ответ 1

Я предлагаю Дэн Севера и меня (пожалуйста, извините кролика в взгляде фар, это было мое первое видео), на котором был опрошен один из Коллеги Эрика Эванса по BDD и DDD.

Также вы можете просмотреть предварительный просмотр сегмента черновика первой главы из книги BDD, которую я пишу (надеюсь, с Дэном тоже):

В качестве другого эффекта обсуждение сценариев без каких-либо технических слов на бизнес-языке позволило разработчикам подобрать этот язык. Затем они переносили этот язык в свою базу кода, реализуя классы, названные в честь элементов бизнес-домена, методы, названные в честь возможностей этих элементов, а также свойства и переменные, названные в честь их реальных свойств и подэлементов.

Это использование бизнес-терминологии в коде называется вездесущим языком в книге Эрика Эванса "Domain Driven Design". Эрик предполагает, что, когда разработчики начинают кодировать язык, соответствующий терминологии бизнес-заинтересованных сторон, разговоры становятся текучими, без необходимости для разработчиков (или аналитиков как прокси) переводить назад и вперед от технических деталей до концепций домена. Код становится более понятным и понятным для новичков. Значение каждого объекта в системе становится более очевидным, а также путь, по которому он возвращает свое значение пользователю, чтобы пользователь мог предоставить значение для бизнеса.

JBehave представил что-то новое. Разработчики использовали не только язык бизнес-домена; теперь они используют язык, который бизнес понимает для описания терминологии программного обеспечения. Вместо слов, таких как тест, приемочный тест, действие, аранжировка, утверждение, красная полоса и зеленая полоска, разработчики говорили о примерах, сценариях, контекстах, событиях, результатах и ​​поведении.

JBehave и BDD внесли вездесущий язык для самой разработки программного обеспечения.

Надеюсь, это показывает, что BDD и DDD работают очень хорошо вместе. Все отзывы приветствуются, за исключением моего чувства в одежде.

Изменить: вы правы, домен довольно прочный. Поэтому мы фокусируемся на более рискованных вещах, таких как презентация и инфраструктура, и рассказываем о нашем понимании домена с использованием сценариев. Мы не можем получить обратную связь о нашем понимании домена, пока у нас не получится получить обратную связь, но это не помешает нам в любом случае найти понимание.

Ответ 2

Позвольте мне добавить предшественник к моему ответу, что я никоим образом не являюсь BDD, TDD или первым экспертом по тестированию. Отвлечение...

Я нашел все тестовые первые методологии разработки, чтобы требовать предчувствия ясновидящего шара на кристалле, когда он начинался с нуля для достижения высокого уровня успеха. Поскольку это совершенно непрактично, я считаю, что этот уровень тестирования имеет смысл только после периода прототипирования, который был сконфигурирован с помощью основного DDD. Наряду с другими основными решениями архитектуры принимаются во внимание, что существует четкий мыслительный процесс о том, как добиться успеха.

Будучи архитектором предприятия, мои мысли №1 в разработке проектов всегда повторяются. Это всегда намного более достижимо, когда основная архитектура будет согласована между проектами и, что еще важнее, в том же проекте.

Теперь, чтобы ответить на ваш вопрос напрямую, в моей книге DDD всегда на первом месте. Без DDD я считаю, что вы в основном колоть в темноте, когда речь заходит о ключевых решениях по дизайну архитектуры, которые позже могут стать очень болезненными. На мой взгляд, DDD также представляет собой концепцию более высокого уровня, которая выражается в блок-диаграммах высокого уровня. Со многими историями BDD, которые будут включать взаимодействие уровня DDD между системами.

Что касается вопроса о том, буду ли писать истории для взаимодействия с пользовательским интерфейсом, в них есть определенная ценность. Тем не менее, они легко могли быть пропущены вместо времени, необходимого для других усилий, поскольку проектные ограничения, как правило, всегда возникают раньше, чем ожидалось. Закодированные тесты пользовательского интерфейса, которые вы пишете, не должны быть хрупкими. Однако, если они хрупки, они почти бесцельно начинаются. Если вы следуете четкому соглашению об именовании элементов HTML, наряду с написанием семантического HTML, вы можете создать очень надежные модульные тесты пользовательского интерфейса. Это гораздо легче выражается в MVC, в отличие от webforms (в ASP.NET java, вероятно, имеет некоторую подобную параллель).

RE: вы предлагаете создавать царапины для домена перед реализацией историй?

Я бы даже вообще пошел немного дальше с определением концепций класса модели и интерфейсов служб. В этот момент, когда начинается реализация интерфейсов, я начинаю работать над историями. Это также привело бы к изменениям в моделях или интерфейсах по мере их возникновения. Чтобы оставить все сервисные интерфейсы и модели, которые будут разработаны, поскольку они развиваются из историй, которые, я думаю, создадут слишком много видений в туннеле. То, что вы начнете создавать модели и/или интерфейсы, которые решают конкретную историю, но не имеют большого смысла для большей картины.

Итак, чтобы на самом деле подвести итог вашему вопросу о среднем уровне, а также о внешнем. Я чувствую, что они очень способны строить друг на друга, тем более, если вы начнете с промежуточного уровня DDD для общих концепций, а затем будете работать за пределами деталей. Я чувствую, что выполнение этого процесса в обратном направлении приведет к гораздо более рефакторингу, чем это необходимо, и значительно более сложному рефакторингу, поскольку вы попытаетесь вытащить свой основной домен из коллекции связанных историй, которые, скорее всего, были разработаны в бункере.

Ответ 3

Мне посчастливилось попасть в мастер-класс в июне этого года на один из примеров Gojko Adzic "Specification by Example".

Гойко упомянул Эрика Эванса и DDD по всему классу.

Момент лампочки для меня был тогда, когда упражнение, которое мы проводили, привело нас к реорганизации модели домена для более глубоких знаний. То есть, когда мы получили более глубокое понимание области, мы реорганизовали модель, а вместе с ней и тесты BDD чтобы отразить это понимание.

Примером в классе была игра в блэкджек, в которой мы первоначально моделировали руку карт как целочисленное значение, основанное на общей сумме карт. Когда мы пришли к более глубокому пониманию того, как игра Блэкджека работала, мы ввели понятие руки, являющейся рукой "Блэкджек", поэтому отошли от использования целочисленного значения, чтобы представить руку ей как целочисленное значение, так и "Блэкджек" 'рука.

В своей практике я стараюсь развить модель домена и его вездесущий язык. Затем я использую этот вездесущий язык в тестах BDD.

Ответ 4

Я не понимаю, почему это не должно работать? BDD - это разработка, основанная на поведении, то есть без вашего процесса разработки, который может (должен) повлиять на ваш дизайн. DDD - это проект, основанный на домене, и больше связан с общим дизайном вашей системы. Короче говоря, в BDD (или любом другом xDD) вы определяете, как что-то должно работать, а затем это зависит от вашего домена, чтобы реализовать эти требования. Если вы выполняете эти требования с использованием DDD или что-то еще, не имеет значения... вам все равно нужна зеленая метка рядом с этим тестом.

ОБНОВЛЕНИЕ: Я не думаю, что DDD - это направление, для меня DDD - это сохранение вашего кода. Я бы сказал, что использование BDD - это способ помочь вашему коду быть чистым, если вы начнете с реализации своего домена, вы можете оказаться в слишком сложном домене. Способ, которым я хотел бы это сделать, - использовать BDD для определения моих функций (например, функции входа в систему) и разных сценариев (например, успешный и неудачный вход в систему). После этого я бы не писал некоторые модульные тесты, поэтому у меня есть что-то, что проверяет код, а не поведение. Когда я выполнил так, модульные тесты, надеюсь, пройдут также тест BDD. После этого настало время для рефакторинга, и во время рефакторинга все ваши тесты должны оставаться зелеными. Вы можете видеть это как два цикла, внешний цикл, который проверяет поведение (BDD) и один внутренний круг, который тестирует реализацию (TDD). Это должно не останавливать вас от использования принципов DDD, вместо этого я бы сказал, что это упростит очистку вашего домена и решение вашей реальной проблемы.

Обновление 2 (ссылки):

Ответ 5

Да, я считаю, что BDD и DDD можно использовать togethor. Вот кадр С#, который может помочь в этом

http://kernowcode.github.io/UBADDAS/