Что такое домен?

104

Я часто вижу этот термин в контексте архитектуры программного обеспечения («доменная модель», «доменный дизайн» и т. Д.). Я прогуглил это, но я получаю тонны различных определений. Так что это на самом деле?

Sipo
источник
12
К сожалению, я думаю, что это одно из тех слов, которое не имеет четкого определения и часто используется в неоднозначных контекстах. Однако, увидев это достаточно, вы получите понимание. Я хочу сказать, что вы не должны ожидать понимания его использования даже после прочтения всех ответов, которые вы увидите здесь. Это займет некоторое время.
аааааа
15
@aaaaaa точно ... Шалтай-Болтай презрительно улыбнулся. ... «Когда я использую слово, - довольно пренебрежительно сказал Шалтай-Болтай, - это означает именно то, что я хочу, чтобы оно значило - ни больше, ни меньше».
Эмори
3
Я не думаю, что это правда, что не имеет четкого определения. Если вы посмотрите на обычное определение Вебстера, вы увидите, что это «регион, над которым осуществляется доминирование», «регион, отличающийся определенным физическим признаком». Подобное определение в математике - «область» функции. Вы можете разбить что-то большое на домены или регионы, основываясь на том, кто отвечает за этот регион, или на основании некоторых критериев. Вроде как модуль. Таким образом, «модель предметной области» (в моем понимании) - это модель, с которой вы можете работать в бизнес-логике вашего приложения. DDD также имеет отношение к видам «регионов».
Сава Б.

Ответы:

9

Слово «домен» в книге Эрика Эванса «Управляемый доменом» имеет особое значение. В этом суть программного обеспечения.

Эванс идет дальше, хотя. По его мнению, есть субдомены даже с одним и тем же программным обеспечением. И это та часть книги, которая посвящена «Стратегическому дизайну».

Существует три «домена»: основной домен, поддерживающий домен и общий домен. Иногда он будет ссылаться на них как на поддомен.

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

Таким образом, основной домен - это часть программного обеспечения, которая представляет как конкурентное преимущество, так и «смысл существования» программного обеспечения. Это часть программного обеспечения, поэтому клиент будет покупать программное обеспечение по сравнению с другим программным обеспечением. Обычно Эванс видит его как домен, содержащий наименьший процент кода. Вы можете думать об этом как о самых важных 20%. Это та часть, которую вы не можете купить с полки, и это может быть просто один модуль или компонент всего программного обеспечения.

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

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

С точки зрения бизнеса важно решить, каков ваш основной домен, и сосредоточить там свои ресурсы для разработки. Эванс имеет много видео, особенно на сайте InfoQ, где он объясняет эти концепции более подробно.

Поэтому, хотя мы часто говорим о «домене» в программном обеспечении, в случае с DDD это не так просто, как может показаться.

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

RibaldEddie
источник
1
Re: ваш последний абзац: может быть, нам следует договориться об основной области разработки программного обеспечения? Но, как согласие о том, что такое ООП, функциональный или любой другой термин, я думаю, что Шалтай-Болтай победил давным-давно.
@nocomprende нет, эти понятия специфичны для конкретного отдельного программного обеспечения в конкретной организации в определенное время. Таким образом, основной домен для MSFT Windows будет отличаться в зависимости от рыночных условий, ожиданий клиентов и т. Д.
RibaldEddie
1
Я думаю, это напоминает мне старую поговорку: «Есть два типа людей: те, кто делит людей на два типа, и те, кто этого не делает». Но ... для людей второго типа будет только один тип людей ... - бесконечная ошибка косвенного
@nocomprende Извините, я не совсем понял ваш первый комментарий - часть «согласия» в основной области разработки программного обеспечения была шуткой.
Рибальд Эдди
109

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

Конкретным примером домена может быть что-то вроде «автоматизированной обработки сложных деталей с использованием высокоскоростного вращающегося резака». Программно-аппаратная система, которая выполняет это, называется станом с ЧПУ .

Другим примером домена является бухгалтерия корпорации.

Дальнейшее чтение
ограниченного контекста Мартина Фаулера

Роберт Харви
источник
4
Ага. Когда вы читаете «домен», вы можете заменить «(ограниченную определенной) областью знаний или проблем».
KlaymenDK
1
Интересно помнить, что область программного обеспечения на самом деле не имеет ничего общего с тем, что люди пытаются достичь, или что они поймут. Я уверен, что простой компьютер в моей машине делает вещи для оптимизации сгорания, о которых я ничего не знаю, и, честно говоря, все равно. Поэтому предполагать, что программное обеспечение имеет отношение к человеческим перспективам и потребностям, является очень опасным недоразумением. Это может пригодиться, так как программные системы охватывают большие области с растущей осведомленностью и способностью выбирать цели. Эй, подожди, разве Азимов не думал об этом когда-то давным-давно?
1
@ user251748 - Ну, я думаю, что речь идет о людях и процессах, в которые они вовлечены, но не обязательно о том, что люди сразу понимают.
Сипо
38

Это просто означает проблемное пространство, в котором вы работаете. Например, если вы создавали веб-сайт электронной коммерции, ваш домен был бы «электронной коммерцией» и включал бы процессы, связанные с практикой продаж вашего клиента / компании. Таким образом, модель предметной области будет представлять собой продукт, счет-фактуру или отчет о доставке.

Becuzz
источник
7
Хм, учитывая, что веб-сайты domain namesтакже известны как домены, я думаю, вы должны уточнить, как вы используете слово домен здесь.
Ещё один случайный пользователь
@YetAnotherRandomUser - Для меня довольно ясно, что он имел в виду. ;)
Сипо
19

Домен представляет собой область знаний. Это может быть как деятельность, в которой существуют проблемы, решаемые вашим программным обеспечением. ( Wiki , DDD Community )

Эрик Эванс в своей книге использует грузовые перевозки, чтобы объяснить, что такое DDD. В его примере домен - это все о доставке . Как груз перемещается, управляется, отправляется и отслеживается и т. Д. Он имеет свои особые правила, язык и процессы. Они будут создавать доменные модели, объекты, сервисы и так далее.

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

Проще говоря: домен - это то, где вы ведете бизнес . Если ваш бизнес занимается грузоперевозками - доставка вашего груза будет вашим доменом. Если ваша компания занимается аутентификацией и авторизацией персонала, то это будет ваш домен.

potfur
источник
7

Эрик Эванс: Из доменно-ориентированного проектирования: борьба со сложностями в основе программного обеспечения

Каждая программа связана с какой-либо деятельностью или интересами ее пользователя. Эта предметная область, к которой пользователь применяет программу, является областью программного обеспечения.

Домен программы бронирования авиабилетов включает в себя реальных людей, летающих на реальных самолетах.

Область бухгалтерской программы - деньги и финансы.

Областью системы контроля исходного кода является сама разработка программного обеспечения.

Модель предметной области, тогда, является «строго организованной и избирательной абстракцией» знаний в голове эксперта в предметной области.

Палермо, описывая архитектуру лука, предложил это резюме

В самом центре мы видим модель предметной области, которая представляет комбинацию состояния и поведения, которая моделирует правду для организации.

Фаулер, в свою очередь, предлагает

Объектная модель домена, которая включает в себя как поведение, так и данные.

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

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

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

Я начинаю с того, что ставлю свою точку зрения на предметную область.

Домен

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

Суб-домены

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

Доменная модель

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

Ограниченные контексты

Самое главное, что ограниченный контекст является логической границей.

Когда определены оба поддомена и основной домен, пришло время реализовать код. Ограниченный контекст определяет осязаемые границы применимости некоторого поддомена. Это область, в которой определенный поддомен имеет смысл, а другие нет. Это может быть разговор, презентация, проект кода с физическими границами, определенными артефактом.

Что дальше?

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


источник
Я бы сказал, что домен для программного обеспечения - это то, что делает программное обеспечение. Это, конечно, не существовало до нас, и это полностью сделано нами, чтобы делать вещи, которые мы хотим делегировать, чтобы они происходили без нашего взаимодействия. Другими словами, речь идет о нашей мечте, которую мы хотим забыть. И мы быстро забываем, как работает программное обеспечение, как только оно развернуто. Программное обеспечение - это игра, лучше подходящая для компьютеров, и мы делали это до сих пор, потому что мы еще не создали компьютеры, чтобы решить проблему, которую мы больше не хотим беспокоить. Но очень скоро ...
Я не прояснил себя в этой части - «перед нами», мой плохой. Я совершенно не хотел сказать, что эта область существовала до человечества. Под «нами» я имел в виду больше разработчиков программного обеспечения, решающих проблему автоматизации, скажем, бизнес-процессов в электронной коммерции. Понятие коммерции, видимо, существовало до них. Таким образом, ответственность разработчика заключается в том, чтобы сделать возможным делегировать вещи на компьютеры, как вы сказали.
Правильно. Я хочу сказать, что люди думают, что компьютерные системы - это способ справиться с реальным миром. Но компьютеры приносят много идей, требований и проблем, которые просто никогда не были частью домена. Это все равно что сказать, что операция - это способ справиться с эмоциональными проблемами. Хорошо, лоботомия работает, но эмоциональные проблемы имеют мало общего с мозгом. И на мои чувства сильно влияют гормоны и нейротрансмиттеры, так что СИОЗС - это часть биологии, психологии, отношений или они категория для себя? Компьютеры - это компьютеры, а не настоящие вещи.
1
Компьютеры - это моделирование реальных вещей. Просто еще одна область, где можно было бы сделать реальные вещи, реальные бизнес-процессы, реальные бизнес-ограничения. Скажем, 50 лет назад я бы заплатил 1 доллар кассиру в магазине, теперь весь процесс покупки может быть без взаимодействия с человеком. Тем не менее мои реальные деньги были сняты с моего реального банковского счета. Поэтому не имеет значения, что вовлечено в какой-либо процесс, компьютер или человека или что-то еще. Вероятно , это может быть какой - то интерес к вам: medium.com/@wrong.about/...
Деньги не настоящие. Бизнес-процессы не реальны. Все, о чем мы можем говорить, это концепция, а не реальность.