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


104

Цей термін я багато бачу в контексті архітектури програмного забезпечення ("модель домену", "дизайн, керований доменом" тощо). Я переглянув це, але отримую тони різних визначень. То що це насправді?


12
На жаль, я думаю, що це одне з тих слів, яке не має чіткого визначення та багато вживається в неоднозначних контекстах. Побачивши це досить, ви отримуєте розуміння. Моя думка, що ви не повинні сподіватися зрозуміти його використання навіть після прочитання всіх відповідей, які ви побачите тут. Це займе час.
aaaaaa

15
@aaaaaa точно ... Humpty Dumpty зневажливо посміхнувся. ... "Коли я вживаю слово," сказав Humpty Dumpty, досить зневажливим тоном, "це означає саме те, що я обираю, щоб означати - ні більше, ні менше".
emory

3
Я не думаю, що це правда, яка не має чіткого визначення. Якщо ви подивитесь на нормальне визначення веб-сайту, то ви побачите, що це "область, над якою здійснюється домінування", "область, що відрізняється певною фізичною ознакою". Подібне визначення в математиці - "домен" функції. Ви можете розділити щось велике на домени чи регіони залежно від того, хто відповідає за цей регіон, або на основі деяких критеріїв. Вигляд як модуль. Тож "доменна модель" (наскільки я розумію) - це модель, з якою можна працювати з діловою логікою вашого додатка. DDD також має відношення до видів "регіонів".
Сава Б.

Відповіді:


9

Слово "домен" у книзі "Дизайн, керований доменом" Еріка Еванса має конкретне значення. Це те, про що йдеться в програмному забезпеченні.

Еванс ходить і далі. На його думку, існують піддомени навіть з тим самим програмним забезпеченням. І це частина книги, яка стосується "Стратегічного дизайну".

Існує три "домени": основний, підтримуючий і загальний домен. Іноді він посилатиметься на них як на піддомени.

Еванс також глибоко піклується про власний бізнес, що стоїть за програмним забезпеченням, і книга орієнтована не лише на розробників, а й на архітекторів та менеджерів, які повинні бачити, як програмне забезпечення та бізнес можуть спільно працювати, і саме цим він переймається, обговорюючи стратегічний дизайн і ці піддомени.

Отже, основний домен - це частина програмного забезпечення, яка представляє як конкурентну перевагу, так і «raison d'etre» програмного забезпечення. Це частина програмного забезпечення, саме тому клієнт купує це програмне забезпечення порівняно з іншим програмним забезпеченням. Зазвичай Еванс розглядає це як домен, що містить найменший відсоток коду. Ви можете вважати це найважливішим 20%. Це частина, яку ви справді не можете купити з полиці, і це може бути лише один модуль або компонент загального програмного забезпечення.

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

Загальний домен - це найменш спеціальна і в деякому сенсі найменш важлива частина програмного забезпечення. Можливо, ви написали це вдома, але може бути ефективніше просто придбати його з полиці або використовувати добре відоме програмне забезпечення з відкритим кодом. Ця частина системи, ймовірно, не характерна для вашого загального домену, тому, наприклад, чи є у вас система доставки, яка маршрутизує посилки, або система обліку здоров'я, яка керує пацієнтами, загальний домен є частиною цих систем, які є загальними і справедливими. просто потрібно бути там, щоб взагалі функціонувати. Це, ймовірно, складає основну частину системи в цілому, але це не обов'язково.

З точки зору бізнесу важливо вирішити, що є вашим основним доменом, і зосередити свої ресурси на розвитку там. Еванс має багато відео, зокрема на сайті InfoQ, де він детальніше пояснює ці поняття.

Тому, хоча ми часто говоримо про “домен” у програмному забезпеченні, у випадку DDD, це не так просто, як може здатися.

Зазначу, що поняття DDD не обов'язково існують у ширшому програмному середовищі. Інші розробники, автори та люди продукту можуть мати різні ідеї та визначення, деякі більш тонкі, а деякі менші. Навіть інші автори, які писали про DDD, можуть замислитися над цими поняттями в книзі Еванса, але я вважаю, що ці поняття все ще корисні при написанні та плануванні програмного проекту.


1
Re: ваш останній абзац: можливо, ми повинні досягти певної згоди щодо основної сфери розробки програмного забезпечення? Але, як домовлятися про те, що таке OOP, або функціональний або будь-який інший термін, я думаю, що Humpty Dumpty виграв давно.

@nocomprende ні, ці поняття специфічні для певного індивідуального програмного забезпечення в певній організації в конкретний час. Тож основний домен для MSFT Windows буде різним залежно від кон'юнктури ринку, очікувань клієнтів тощо
RibaldEddie

1
Я думаю, це нагадує мені стару приказку: "Є два види людей: ті, хто розділяє людей на два види, і ті, хто цього не робить". Але ... для людей другого типу був би лише один тип людей ... - нескінченна помилка

@nocomprende вибачте, що я не дуже зрозумів ваш перший коментар - частина "згоди" на основній області розробки програмного забезпечення була жартом.
RibaldEddie

109

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

Конкретним прикладом домену може бути щось на кшталт "автоматизованої обробки складних деталей за допомогою швидкісного обертового різака". Програмно-апаратний комплекс , який виконує це називається ЧПУ млин .

Іншим прикладом домену є бухгалтерія корпорації.

Подальше читання
обмеженого контексту Мартіна Фаулера


4
Так. Коли ви читаєте "домен", ви, можливо, можете замінити "(обмежений певним) напрямком експертизи або занепокоєння".
KlaymenDK

1
Цікаве, що потрібно пам’ятати, що домен програмного забезпечення насправді не має нічого спільного з тим, що люди намагаються досягти, або з тим, що вони розуміють. Я впевнений, що простий комп'ютер у моїй машині робить щось для оптимізації горіння, про яке я нічого не знаю, і, чесно кажучи, це не хвилює. Тож припускати, що програмне забезпечення стосується людської точки зору і прагне - це дуже небезпечне непорозуміння. Це може стати в нагоді, оскільки програмні системи охоплюють більші області, збільшуючи обізнаність та можливість вибору цілей. Гей, чекай, чи не думав про це Асимов так давно?

1
@ user251748 - Ну, я думаю, що мова йде про людей, а процеси, в яких вони беруть участь, просто не обов'язково про те, що люди розуміють миттєво.
Сіпо

38

Це просто означає проблемний простір, в якому ви працюєте. Наприклад, якщо ви будували веб-сайт електронної комерції, ваш домен був би "електронною комерцією" і включав би процеси, пов'язані з практикою продажу вашого клієнта / компанії. Таким чином, доменна модель може представляти собою товар, рахунок-фактуру або запис про доставку.


7
Гм, враховуючи, що веб-сайти domain namesтакож відомі як домени, я думаю, вам слід уточнити, як ви тут використовуєте слово домен.
YetAgetherRandomUser

@YetAbodyRandomUser - Для мене досить зрозуміло, що він мав на увазі. ;)
Сіпо

19

Домен є галузь знань. Це може бути як діяльність, в якій існують проблеми, вирішені вашим програмним забезпеченням. ( Вікі , спільнота DDD )

Ерік Еванс у своїй книзі використовує доставку вантажів, щоб пояснити, що таке DDD. У його прикладі, домен - це все про доставку . Як переміщують, керують, відвантажують та відслідковують вантаж тощо. Він постачається зі своїми специфічними правилами, мовою та процесами. Вони створюватимуть доменні моделі, об’єкти, послуги тощо.

Створюючи додаток, ви матимете певний дозвіл, як і в реальному світі доставки, не кожен може отримати доступ до складів. Як авторизовані користувачі та як надаються дозволи можуть бути поза доменом , оскільки інформація може не стосуватися перевезення вантажу.

Простіше кажучи: домен - це те, де ви ведете бізнес . Якщо ваш бізнес здійснює доставку вантажів - доставка вантажу буде вашим доменом. Якщо ваш бізнес займається автентифікацією та авторизацією персоналу, то це буде ваш домен.


7

Ерік Еванс від дизайну, керованого доменом: вирішення складності в серці програмного забезпечення :

Кожна програмна програма стосується певної діяльності чи інтересу свого користувача. Тематична область, до якої користувач застосовує програму, - це домен програмного забезпечення.

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

Домен облікової програми - гроші та фінанси.

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

Тоді доменна модель - це "жорстко організована та вибіркова абстракція" знань у голові експерта з домену.

Палермо, описуючи архітектуру цибулі, запропонував це резюме

У самому центрі ми бачимо Доменну модель, яка представляє комбінацію стану та поведінки, яка моделює істину для організації.

Фаулер, у свою чергу, пропонує

Об'єктна модель домену, що включає в себе і поведінку, і дані.

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


Я б м'яко змінив ваше визначення від дійсної діяльності до того, що робить комп'ютерна система. Наприклад, "Домен системи управління вихідним кодом є" - зберігання та пошук файлів вихідного коду . Домени моделюються не для обробки реальних речей, а для спрощення побудови та обслуговування програмних систем. Тому акцент робиться на тому, що комп’ютер може зробити для полегшення цього, а не на те, що можуть робити люди. Цифрові рентгенівські промені покращують чутливість та обробку зображень під час процесу рентгенівських знімків, вони нічого не роблять для людей, і були б настільки ж корисними для безвідповідного сканування багажу.

2

Оскільки ви, мабуть, вже маєте уявлення про те, що таке домен, я думаю, що наступним кроком, який ви зробите, є спроба визначити субдомен, модель домену та, що ще важливіше, обмежений контекст.

Я все ж починаю з викладу своєї точки зору домену.

Домен

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

Піддомени

DDD передбачає розкладання домену на піддомени, щоб полегшити їх моделювання та розуміння. Сам факт, що ви ведете бізнес, підказує, що є хоча б одна переважаюча цінність для бізнесу. Той, на якому ви заробляєте гроші. Той, для якого ми розпочали свою справу. Тож навіть якщо ви не знаєте такого слова, як "Основний домен", воно все одно присутнє. Те ж стосується і субдоменів: напевно, вам знадобиться бухгалтерія, людські ресурси, технічна підтримка - але це другорядне значення.

Модель домену

Немає необхідності в повному моделюванні витягнутих піддоменів. У кожному субдомені, який нас цікавить, існує певний набір правил. Набір правил у деякому субдомені, необхідне для досягнення певного бізнес-результату, називається моделлю.

Обмежений контекст

Найголовніше, що обмежений контекст є логічною межею.

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

Що далі?

Якщо вас цікавить, як обмежена концепція контексту співвідноситься з концепцією субдомену, як визначати субдомени та обмежені контексти, як представляти їх спілкування один з одним та як організувати команди з цими поняттями на увазі, напевно, вам це буде цікаво подальше читання .


Я б сказав, що домен для програмного забезпечення - це те, що робить це програмне забезпечення. Це, звичайно, не існувало до нас, і це повністю складено нами, робити речі, які ми хочемо делегувати, щоб вони відбувалися без нашої взаємодії. Іншими словами, мова йде про сон, який ми мали, про який хочемо забути. І ми швидко забуваємо, як працює програмне забезпечення, як тільки його розгортають. Програмне забезпечення - це гра, яка краще підходить для вирішення комп'ютерів, ми лише робили це до цього часу, оскільки ще не побудували комп'ютери, щоб вирішити проблему, яку ми не хочемо більше турбувати. Але, дуже скоро ...

Я не дав зрозуміти в цій частині - "перед нами", моя погана. Я зовсім не мав на увазі, що домен існував до людської раси. Під "нами" я мав на увазі більше, як розробники програмного забезпечення, що вирішили проблему автоматизації, скажімо, бізнес-процесів в електронній комерції. Поняття комерції, мабуть, існувало і раніше. Тому відповідальність розробника полягає в тому, щоб зробити можливість делегувати речі на комп'ютери, як ви вже говорили.

Правильно. Моя думка полягає в тому, що люди думають, що комп'ютерні системи - це спосіб спілкування з реальним світом. Але комп'ютери пред'являють багато ідей, вимог та проблем, які просто ніколи не були частиною домену. Це як би сказати, що операція - це спосіб вирішити емоційні проблеми. Ну, лоботомія працює, але емоційні проблеми мало стосуються мозку. І на мої почуття сильно впливають гормони та нейромедіатори, тож СЗПЗ є частиною біології, психології, стосунків чи вони є категорією самих себе? Комп’ютери - це комп'ютери, а не реальні речі.

1
Комп'ютери - це про моделювання реальних речей. Просто ще одна сфера, де можна було реалізувати реальні речі, реальні бізнес-процеси, застосувати реальні обмеження для бізнесу. Скажімо, 50 років тому я заплатив би 1 долар за касу в магазині, тепер увесь процес покупки могла бути без взаємодії з людиною. Проте мої реальні гроші були зняті з мого реального банківського рахунку. Тож не має значення, що стосується будь-якого процесу, комп'ютера чи людини чи іншого. Напевно, це може вас зацікавити: medium.com/@wrong.about/…

Гроші не реальні. Бізнес-процеси не реальні. Все, про що ми можемо говорити, - це концепція, а не реальна.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.