background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Is Domain-Driven Design Overrated? • Stefan Tilkov • GOTO 2021"

input logo icon
Обложка аудиозаписи
Подождите немного, мы готовим ссылки для удобного просмотра видео без рекламы и его скачивания.
console placeholder icon
Оглавление
|

Оглавление

0:00
Intro
0:26
What is DDD?
4:27
Key aspect 1: Ubiquitous language
4:52
Key aspect 2: Tactical patterns
6:13
Key aspect 3: Strategic design
7:00
Bounded contexts
9:29
Conceptual extensibility
15:15
Should design be domain-driven?
26:30
Contexts revisited
27:38
Is DDD overrated?
31:05
Outro
Музыка из этого видео
|

Музыка из этого видео

Теги видео
|

Теги видео

GOTO
GOTOcon
GOTO Conference
GOTO (Software Conference)
Videos for Developers
Computer Science
Programming
Software Engineering
GOTOpia
GOTOpia Chicago
Stefan Tilkov
INNOQ
DDD
Domain-Driven Design
Software Architecture
UX
UI
U-Driven
gotocon
gotopia
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:00
[Музыка]
00:00:13
Итак, давайте начнем с обсуждения моей темы,
00:00:16
основной движущей силой дизайна. Я думаю, что одна из
00:00:18
причин, по которой вы посещаете это выступление или
00:00:20
смотрите это выступление, заключается в том, что вы знаете, что это такое,
00:00:22
но если вы этого не сделаете, я собираюсь
00:00:24
потратить несколько минут на объяснение моего
00:00:27
понимания предметно-ориентированного дизайна.
00:00:29
Обещаю не делать это слишком долго. По
00:00:33
сути, я постараюсь
00:00:34
подчеркнуть то, что, по моему мнению,
00:00:36
основной вклад основного
00:00:38
дизайна заключается в том, как сказал Свен, потому что
00:00:41
на самом деле, несмотря на название мне нравится
00:00:43
концепция, мне нравится сообщество, мне
00:00:45
нравятся многие члены этого
00:00:47
сообщества, и мне нравится большая часть их
00:00:48
вклада,
00:00:50
поэтому давайте немного поговорим о том, что
00:00:52
на самом деле представляет собой предметно-ориентированный дизайн,
00:00:54
так что это моя попытка донести
00:00:58
до меня
00:00:59
это это подход к разработке
00:01:01
программного обеспечения, который ставит предметную область в
00:01:03
центр,
00:01:04
и это кажется
00:01:05
совершенно очевидным,
00:01:07
в конце концов, это должен быть единственный способ создания программного обеспечения,
00:01:09
зачем вам создавать программное обеспечение, если
00:01:11
вы не создаете его для предметной области
00:01:12
он предназначен для правильной работы, это кажется
00:01:14
совершенно очевидным,
00:01:16
но, как вы можете видеть, я пожилой человек,
00:01:17
я занимаюсь этим бизнесом уже долгое
00:01:19
время и был частью
00:01:21
группы людей, которые любят играть
00:01:23
с технологиями, и я' Я видел много-
00:01:25
много проектов, которые были основаны на
00:01:27
определенных технологических логических
00:01:29
попытках вокруг какого-то инструмента, которые были
00:01:31
больше мотивированы интересом людей
00:01:33
поиграть с интересными вещами, а не сосредоточением
00:01:36
внимания на предметной области, поэтому я думаю, что это
00:01:38
основная идея в основной
00:01:40
дизайн,
00:01:41
и еще одна вещь, которую я считаю
00:01:42
основной частью, это то, что
00:01:44
другие в других
00:01:46
сообществах считают чем-то,
00:01:49
что должно быть отделено от
00:01:50
программного обеспечения,
00:01:51
является
00:01:52
основной частью или существенной частью
00:01:55
программного обеспечения в обязательном дизайне,
00:01:57
а именно модель, поэтому идея о том, что
00:01:59
модель вашей предметной области, которая у вас есть, на
00:02:02
самом деле является ядром программной
00:02:04
системы, которую вы создаете,
00:02:05
основные концепции, которые вы
00:02:08
обычно выражаете в модели, на
00:02:09
самом деле видны в коде,
00:02:11
реализующем эту логику предметной области, которая
00:02:14
другая ключевая часть - это две
00:02:16
вещи, которые я считаю очень важными,
00:02:18
конечно, я также дам вам официальное
00:02:20
определение, это одно из
00:02:24
справочника Эрика Эванса по проектированию, ориентированному на предметную область, поэтому Эрик Эванс - автор
00:02:26
оригинальной книги, которая вышла Я думаю, что
00:02:28
в 2000 году что-то в 2003 году или около
00:02:32
того, в одном из обновлений
00:02:34
терминологии он дал это определение,
00:02:37
оно имеет много общего с тем,
00:02:39
что я только что сказал, поэтому сосредоточьтесь на основной
00:02:41
области, еще одном важном для него аспекте -
00:02:43
это сотрудничество между
00:02:45
экспертами в предметной области и практиками в области
00:02:47
технологий или программного обеспечения, поэтому
00:02:50
мы должны работать вместе и
00:02:51
иметь общее понимание, чтобы прийти к
00:02:54
этому вездесущему языку, который заключается в том,
00:02:58
что у вас есть общий набор слов, которые
00:03:00
вам не нужно Перевод между
00:03:02
терминологией, которую используют люди, занимающиеся программным обеспечением,
00:03:03
и той, которую используют люди в предметной области, поскольку
00:03:06
специалист по программному обеспечению должен быть вашей целью,
00:03:08
чтобы уловить этот язык, чтобы помочь
00:03:10
экспертам в предметной области прояснить язык и
00:03:12
сделать его основной частью всех
00:03:14
концепций и компонентов, и строительные
00:03:16
блоки, которые есть в вашей
00:03:17
программной системе,
00:03:19
так что хорошо это или нет, я думаю, что
00:03:20
это совершенно хорошо, мы,
00:03:22
вероятно, все можем согласиться, что это звучит
00:03:24
очень хорошо, и я определенно думаю, что это
00:03:26
звучит очень хорошо,
00:03:27
когда я читаю книгу. было
00:03:29
интересное событие, которое было очень давно, как
00:03:31
я уже сказал, когда я читал книгу, у меня было
00:03:32
интересное чувство, которое я
00:03:34
научился распознавать как что-то хорошее,
00:03:36
и это чувство -
00:03:38
ну да, это кажется очевидным,
00:03:40
если вы читаете книгу, и что такое написано так, как
00:03:43
кажется, что это
00:03:44
очень очевидно, тогда
00:03:46
часто бывает так, что кто-то нашел
00:03:48
время, чтобы действительно
00:03:50
записать что-то связным и
00:03:52
логическим образом, что должно быть
00:03:54
общеизвестно, но часто
00:03:56
для вас это не очевидно, это может быть не так очевидно
00:03:58
для других людей, не все может быть
00:03:59
очевидным для вас, только часть этого может быть очевидной,
00:04:01
и установление этого общего
00:04:03
понимания - я думаю, это очень
00:04:05
хорошо, я не думаю, что Эрик Эванс стал бы
00:04:07
утверждать, что он изобрел массу новых
00:04:09
вещей, я не думаю он когда-либо делал это, по
00:04:10
его словам,
00:04:12
он вывел язык шаблонов, он
00:04:15
придумал способ говорить о вещах, который был
00:04:17
для него лучшей практикой на тот момент,
00:04:20
и ключевые аспекты книги, которые,
00:04:22
как вы знаете,
00:04:24
нашли отклик у меня,
00:04:25
были такими: три вещи: во-первых, это
00:04:28
вездесущий язык, о котором мы уже
00:04:29
говорили, я думаю, что это
00:04:30
отличная концепция, она многое изменила
00:04:32
для меня,
00:04:33
заставила меня меньше хотеть изобретать новые термины,
00:04:36
заставила меня захотеть понять, почему
00:04:39
основные люди использовали тот язык, который они
00:04:41
использовали, так Я думаю, что это очень хорошо,
00:04:44
и очень, очень полезно
00:04:45
иметь такой согласованный язык.
00:04:48
Второй вклад книги — это
00:04:50
тот, о котором я собираюсь поговорить немного
00:04:51
позже, а именно
00:04:53
идея тактических паттернов.
00:04:56
теперь, если вы создаете программное обеспечение, на
00:04:59
самом деле не имеет значения, делаете ли вы
00:05:00
это объектно-ориентированным способом или
00:05:01
нет, но
00:05:03
особенно если вы создаете объектно-
00:05:04
ориентированное программное обеспечение, тогда вы знакомы
00:05:06
с определенными шаблонами, такими как
00:05:08
объект-значение или, возможно, сущность Возразить, что
00:05:11
эти вещи существовали до
00:05:13
выхода книги. Они не являются изобретением
00:05:16
предметно-ориентированного дизайна,
00:05:18
но они являются ключевой частью книги. На
00:05:20
самом деле они могут составлять основную часть
00:05:22
книги
00:05:23
и служат набором шаблонов для
00:05:26
помочь вам структурировать и спроектировать вашу
00:05:28
программную систему
00:05:30
так, чтобы фабрика репозитория объектов-объектов-объектов-значений -
00:05:33
это были вещи,
00:05:35
которые были там до модуля,
00:05:37
а также они были повышены до того же
00:05:39
уровня, что и шаблон, здесь такие
00:05:41
вещи, как агрегат, были немного больше,
00:05:43
я бы не стал скажем, неясно, но немного более
00:05:45
ново,
00:05:46
но по сути это был тот язык, если
00:05:49
хотите, который Эрик Эванс придумал
00:05:51
в своей книге, и опять же, это не было
00:05:53
чем-то совершенно новым для меня,
00:05:54
мы использовали похожие термины во многих
00:05:56
проектах, которые я знаю что многие другие люди
00:05:58
были в то же время, так что, по сути, это было
00:05:59
присвоение хороших имен или
00:06:02
сборка вещей с хорошими именами, которые
00:06:04
были широко распространены,
00:06:06
это технический взгляд на все
00:06:08
это, и после технической части
00:06:10
на самом деле есть еще одна совершенно другая
00:06:12
часть, которая стратегическая
00:06:14
часть основного проектирования в этой
00:06:15
книге, и это, я думаю, также
00:06:17
чрезвычайно важно для меня, на самом деле
00:06:19
более важная часть предметно-ориентированного
00:06:21
проектирования, в
00:06:22
ней также есть ряд шаблонов,
00:06:24
ряд концепций с именами,
00:06:26
например, ограниченный контекст, который означает
00:06:29
ключевую концепцию здесь и ряд
00:06:31
шаблонов взаимоотношений между
00:06:33
контекстом баннера и командами, которые помогают
00:06:35
создавать программное обеспечение, реализующее этот
00:06:37
контекст. Я собираюсь объяснить термин «
00:06:39
контекст» немного подробнее на следующем
00:06:40
слайде,
00:06:41
но ключевая идея, которая Я хочу
00:06:43
донести здесь то, что снова книга
00:06:46
и область концепции дизайна
00:06:48
содержат ряд тех вещей, которые
00:06:50
являются хорошими и полезными для обсуждения,
00:06:53
когда речь идет об отношениях
00:06:55
между контекстами и командами,
00:06:58
так что же это за ограничения? контекст, о
00:07:01
котором мы говорим, я говорил
00:07:02
об заброшенном контексте, по сути, это
00:07:05
контекст внутри определенной части
00:07:08
вездесущего языка, или, если хотите,
00:07:10
определенный вездесущий язык верен,
00:07:12
поэтому посмотрите на этот пример здесь, если вы
00:07:14
думаете о более крупной системе затем очень часто
00:07:16
вы в конечном итоге разбиваете его на,
00:07:19
назовем их модулями, или подсистемами, или
00:07:22
пакетами, или строительными блоками,
00:07:24
внутри этих строительных блоков могут
00:07:26
существовать вещи, которые кажутся такими же, как и в
00:07:28
других строительных блоках, поэтому в моем примере
00:07:30
вы видите продукт и клиента в
00:07:32
мои три разных ограниченных контекста здесь:
00:07:34
управление заказами, учет
00:07:36
и выполнение. Эти концепции содержания
00:07:38
существуют,
00:07:39
и у них есть взаимосвязь, но
00:07:41
они не одинаковы,
00:07:43
если вы рассматриваете, что такое клиент с
00:07:45
точки зрения бухгалтерского учета, это в основном
00:07:47
финансовый
00:07:48
вопрос, он имеет финансовую значимость. тогда как
00:07:50
клиент с
00:07:52
точки зрения управления заказами больше связан с
00:07:54
созданием заказа и, возможно, отслеживанием
00:07:57
статуса заказа и наличием
00:08:00
какой-то информации о клиенте, которую я не знаю, чтобы
00:08:01
предлагать им другие вещи для
00:08:03
заказа, тогда как в
00:08:05
области выполнения ключевой момент это может быть
00:08:06
адрес доставки и то, как они хотят, чтобы
00:08:08
их посылка была доставлена, это всего лишь
00:08:11
примеры, но дело в том, что
00:08:13
в этих контекстах вы
00:08:16
получаете определенный уровень изоляции,
00:08:19
соглашаясь, что, что, что
00:08:21
означает терминология домена внутри этот
00:08:23
конкретный контекст в отличие от общего,
00:08:27
который, на мой взгляд, является
00:08:28
своего рода абсолютным кошмаром для
00:08:30
каждого человека, которому приходится создавать
00:08:33
программное обеспечение, а именно:
00:08:34
кто-то обошел компанию и
00:08:36
спросил всех, что вы думаете о
00:08:37
клиенте как вы думаете, что
00:08:39
клиенты, что вы думаете, а затем
00:08:40
добавить атрибуты и обязанности
00:08:43
к богоподобному объекту клиента, который затем какой-
00:08:45
то бедняге придется
00:08:47
реализовать,
00:08:48
потому что попытка придумать одного
00:08:49
клиента, который будет удовлетворять потребности всех, наверняка будет иметь успех
00:08:52
закончиться катастрофой,
00:08:54
поэтому эта идея разделения вещей снова
00:08:57
не была изобретением предметно-ориентированного
00:08:59
проектирования, но у нее было очень крутое имя, и
00:09:01
имя, которое закрепило эту концепцию ограниченного контекста,
00:09:03
является для меня единственной самой
00:09:05
важной концепцией во всех основных
00:09:07
продуманный дизайн и тот, который мне очень
00:09:08
нравится использовать во многих местах,
00:09:12
чтобы все звучало хорошо, надеюсь, вы
00:09:15
не думаете, что я хотел, чтобы вы знали,
00:09:17
рисовать вещи в бою, я не хотел
00:09:19
этого делать, поэтому я думаю все это
00:09:20
ценный вклад и полезные вещи,
00:09:23
поэтому давайте немного поговорим о проблемах,
00:09:25
которые у меня возникают с некоторыми из этих вещей.
00:09:28
Первая из них заключается в том, что я действительно ценю
00:09:30
концептуальную расширяемость.
00:09:33
Мне очень нравится идея иметь
00:09:36
правильный язык, поэтому идея, что вы иметь
00:09:39
этот язык, который вы можете использовать, чтобы
00:09:41
говорить с другими об определенных
00:09:43
концепциях, это очень ценная вещь, если вы
00:09:45
можете договориться об основном языке, это
00:09:47
действительно круто,
00:09:48
но если вы подумаете, какой основной
00:09:50
язык на нашем уровне, вы знаете, на
00:09:52
уровень дизайнера, тогда вы наверняка
00:09:54
знаете
00:09:55
определенный способ метауровня,
00:09:58
так что давайте подумаем об этом, если мы
00:10:00
обобщим всю эту концепцию, и этот
00:10:02
вездесущий язык также существует на
00:10:04
уровне проектирования программного обеспечения, поэтому шаблоны,
00:10:06
которые я вам показал, сами по
00:10:08
себе могут быть вездесущий
00:10:10
язык, правильные шаблоны, о которых мы
00:10:12
говорим, другие шаблоны проектирования программного обеспечения
00:10:14
в области проектирования программного обеспечения, у
00:10:16
нас есть сущности, и агрегаты, и
00:10:17
значения, и контексты, и партнерские
00:10:19
отношения, какими бы правильными они ни были, это
00:10:21
наш язык,
00:10:25
ну, интересная вещь здесь заключается в том, что
00:10:27
то же самое, что я
00:10:29
утверждал, верно для предметной области, о которой мы
00:10:31
обычно думаем, верно и для нашей
00:10:33
предметной области. Неужели вы действительно ожидаете, что
00:10:35
мы сможем обойти каждый
00:10:37
программный проект в мире и
00:10:39
придумать один? набор шаблонов, который
00:10:41
соответствует всем из них,
00:10:43
я бы не стал, потому что программные
00:10:45
проекты очень разные, я имею в виду, что у них
00:10:46
есть у
00:10:48
них разные контексты, верно,
00:10:50
контекст на самом деле - это
00:10:52
мы, как разработчики программного обеспечения, поэтому я думаю, что
00:10:54
эта идея, этот язык действительно должен быть
00:10:56
более что-то вроде жаргона, верно,
00:10:58
это жаргон в определенном контексте
00:11:00
внутри определенного сообщества, поэтому давайте
00:11:01
предположим, что все мы здесь работаем в
00:11:05
рамках более крупного программного проекта, который
00:11:06
может быть распределен между несколькими командами,
00:11:09
тогда у нас есть свой собственный жаргон на нескольких
00:11:12
уровнях, мы есть слова, которые имеют значение
00:11:14
внутри каждой команды, у нас также есть слова, которые
00:11:16
имеют значение для всех команд,
00:11:18
например, способы, которыми мы определяем, как
00:11:20
интегрировать наши материалы или как создавать
00:11:22
интерфейсы, или как получить доступ к базе данных
00:11:24
или
00:11:25
осуществлять сетевое взаимодействие правильно в
00:11:27
этих вещах.
00:11:29
это способы, которые мы придумываем и которые
00:11:31
меняются с течением времени, как только мы
00:11:33
обнаруживаем шаблон,
00:11:35
мы на самом деле его используем, поэтому
00:11:37
главное, что я хочу
00:11:39
здесь донести, это то, что набор предопределенных
00:11:41
шаблонов всегда является лишь отправной точкой, а
00:11:44
не самоцель, я не думаю,
00:11:47
что Эрик Эванс когда-либо хотел заявить,
00:11:48
что набор шаблонов, которые он
00:11:50
придумал, был единственным набором
00:11:52
шаблонов, который мог бы быть
00:11:53
кому-то полезен, конечно, зачем ему
00:11:55
такое утверждать он умный человек, но
00:11:57
некоторые люди воспринимают это
00:11:59
чрезвычайно буквально,
00:12:01
они думают, что вот эти вещи - это
00:12:03
образец узоры, если вы делаете
00:12:05
основной дизайн барабана, то вам нужно использовать
00:12:07
эти вещи только эти вещи, и вы
00:12:09
должны использовать их именно так что в
00:12:11
книге они описаны, тогда как я считаю,
00:12:14
что это может быть отличной отправной
00:12:16
точкой, они могут вполне подойти
00:12:17
вам, но вы также можете использовать свой
00:12:19
собственный язык, вы можете добавить фильтры,
00:12:20
правила, прокси и роли контрактов,
00:12:22
ссылающиеся на все, что делает
00:12:24
смысл в вашем жаргоне в вашем
00:12:27
контекстном языке, так что все, что имеет
00:12:28
для вас смысл, вы добавляете на этом уровне,
00:12:31
так что по сути это означает, что мы
00:12:33
расширяем технические шаблоны, но,
00:12:35
конечно, то же самое верно и для
00:12:36
контекстных отношений, так что, если вы
00:12:39
думаете о что это, если вы
00:12:41
знакомы с ними,
00:12:42
что они делают, если вы не вкратце
00:12:44
объясните им, что они делают, они
00:12:46
рассказывают вам, как могут быть
00:12:48
связаны контексты, например, один контекст, принадлежащий
00:12:51
одной команде,
00:12:52
может быть
00:12:54
просто соответствие любому интерфейсу, который
00:12:56
предписывает другой контекст, вы не имеете права
00:12:59
голоса, поскольку они более влиятельны, чем
00:13:01
вы, что вы находите что-то, что может быть
00:13:02
сторонней компанией или стандартным продуктом,
00:13:05
что бы они вам ни говорили, контракт -
00:13:07
это контракт, который вы
00:13:09
используете получить доступ к их услугам или их
00:13:11
интерфейсу, что бы они
00:13:13
вам ни предлагали, правильно, так что это один из способов
00:13:15
отношений, другой может быть
00:13:16
партнерством, где это скорее
00:13:18
переговоры между равными, или
00:13:20
отношения могут быть такими, в которых вы
00:13:22
фактически разделяете код, где у вас есть
00:13:24
общий фрагмент кода, который
00:13:26
доступен и используется в обоих контекстах,
00:13:29
возможно, это не очень хорошая идея, но дело
00:13:30
не в этом, суть в том, что вы можете
00:13:32
описать эту связь, если она существует,
00:13:34
и это опять же очень полезно, это классная
00:13:36
вещь, которую вы рисуете контекстная карта, вы
00:13:39
визуализируете эти зависимости, вы можете
00:13:40
рассуждать о них, у вас есть какие-то способы
00:13:43
справиться с ними, например,
00:13:44
введение антикоррупционного уровня как
00:13:46
средства изоляции от
00:13:48
изменений.
00:13:49
Это все очень хорошие идеи, но, опять же,
00:13:52
это отправная точка. да, у вас может
00:13:53
быть что-то вроде официального контракта,
00:13:55
который может означать что-то очень специфическое
00:13:56
для вас, у вас может быть общий спектр,
00:13:58
стандарт третьей стороны или что-то еще,
00:14:00
какой бы шаблон снова имел для вас смысл,
00:14:03
вы должны быть в состоянии расширить это, как вы
00:14:06
видите подходят,
00:14:07
поэтому моя критика не в том, что шаблоны
00:14:09
плохие, у меня есть некоторые проблемы с некоторыми из них,
00:14:11
с некоторыми из них я не большой поклонник
00:14:12
совокупного шаблона, но что бы я ни
00:14:13
имел в виду, это обсуждение, которое мы можем обсудить, если
00:14:15
когда-нибудь будем работать вместе над проектом но
00:14:18
все, что имеет для вас смысл в вашем
00:14:19
проекте, должно быть той
00:14:21
терминологией и тем языком,
00:14:22
которые вы придумали. На
00:14:24
самом деле
00:14:25
мы делали это в области, которая на самом деле уже
00:14:28
не крута, это
00:14:30
действительно больше не модно, и это
00:14:32
Сообщество, управляемое моделями,
00:14:34
архитектура, управляемая моделями,
00:14:36
сообщество разработчиков, основанное на ремоделировании, верно, так что, если у вас
00:14:38
есть седые волосы, как у меня, то, возможно,
00:14:40
вы помните, что когда-то это была действительно
00:14:42
крутая вещь,
00:14:43
я не думаю, что это плохо только потому, что это
00:14:45
больше не модно, я не думаю,
00:14:47
что это решение
00:14:49
всех проблем, либо вовсе нет, но
00:14:52
я хочу отметить, что в тот
00:14:54
день, когда мы это сделали, у нас была
00:14:55
похожая концепция, у нас был язык
00:14:58
метауровень способ выражения моделей
00:15:00
с определенными стереотипами, например, в
00:15:03
uml, это была та же идея, это была та же самая
00:15:05
концепция, это, как вы знаете,
00:15:07
издалека, это очень похоже на
00:15:09
все это,
00:15:10
так что это было мое, это было моим пунктом номер
00:15:12
один что я хотел сделать
00:15:14
второй, посвященный тому, что
00:15:16
на самом деле означает «управление доменом»,
00:15:19
поэтому я упомянул, что
00:15:21
мне нравится идея быть управляемым
00:15:23
доменом, на самом деле у меня есть слайд из
00:15:26
другой колоды слайдов, в котором
00:15:27
говорится об этом распространенном
00:15:30
заболевании среди разработчики, я намекнул на
00:15:32
это в начале, аллергия на правый домен,
00:15:33
это довольно распространенная вещь,
00:15:35
как ни странно, я считаю, что она
00:15:38
особенно распространена среди архитекторов программного обеспечения,
00:15:40
я не знаю, почему я думаю, что
00:15:42
архитекторы программного обеспечения любят играть с
00:15:43
вещами, которые им нравятся, чтобы выяснить, как
00:15:45
технически сложные вещи
00:15:47
работают, поэтому они как бы убегают из
00:15:49
предметной области в я могу сказать это, потому что
00:15:52
я сам архитектор программного обеспечения, так что
00:15:54
я всегда диссирую себя
00:15:55
так же, как и все остальные, поэтому
00:15:57
эта идея, что вы можете, чего вы можете
00:15:59
избежать э-э, знакомство с предметной областью, как
00:16:02
вы знаете, поиск убежища
00:16:04
в технологиях - это своего рода печальная
00:16:07
печальная вещь, но это случается, и
00:16:09
мандаринский дизайн хочет делать все
00:16:11
по-другому, и это заслуживает аплодисментов.
00:16:14
Один из способов, которым он хочет это сделать, - это
00:16:17
это очень чистая вещь, лежащая в основе
00:16:20
программной системы, которую вы создаете,
00:16:22
поэтому, если вы разрабатываете
00:16:24
объектно-ориентированный язык, например Java,
00:16:27
Scala или C-Sharp, тогда идея состоит в том,
00:16:30
что у вас есть этот фрагмент кода, который
00:16:32
на самом деле имеет только основную логику, в идеале
00:16:35
он вообще не зависит от каких-либо внешних
00:16:37
технических аспектов,
00:16:40
поэтому с чем бы ни была ваша система должна
00:16:41
взаимодействовать, есть
00:16:44
несколько примеров, таких как какое-то
00:16:46
хранилище документов, сеть, база данных, пользовательский
00:16:48
интерфейс, что бы то ни было. все эти
00:16:50
вещи являются внешними по отношению к ядру вашего домена,
00:16:53
ваша логика домена
00:16:55
правильно, эта логика домена в центре
00:16:58
может жить,
00:16:59
пока может продолжать приносить пользу,
00:17:01
пока внешние интерфейсы меняются,
00:17:05
и соединение осуществляется через порт, поэтому у
00:17:07
вас есть определенные порты, определенные
00:17:08
ожидания обычно код вашего домена
00:17:11
может ожидать, что есть
00:17:13
что-то, что может общаться с другими,
00:17:17
а затем некоторая реализация этого
00:17:18
подключит его к
00:17:20
реальному сетевому интерфейсу, как только один
00:17:22
пример, так что эти адаптеры,
00:17:25
которые являются своего рода внешним
00:17:26
периметром здесь они как бы
00:17:29
переводятся между техническими деталями
00:17:32
какого-то конкретного интерфейса и чистой
00:17:34
красотой вашей внутренней модели,
00:17:38
и вы, вероятно, видели это под
00:17:39
разными названиями, так что формы здесь
00:17:41
предполагают, что это
00:17:43
шестиугольная архитектура, название предполагает
00:17:45
спортивные адаптеры это, по сути, то же
00:17:47
самое,
00:17:48
вы, вероятно, тоже видели это как чистую
00:17:50
архитектуру. Я не писал об этом здесь,
00:17:52
но думаю, что по сути это не особо
00:17:54
отличается от хорошей многоуровневой
00:17:56
архитектуры, но я готов поспорить, что обсудим
00:17:57
этот вопрос, если хотите в
00:17:59
конце концов, это не очень важно для
00:18:00
меня,
00:18:01
ключевой
00:18:02
аспект для меня вот вот эта
00:18:05
эта замечательная идея эта замечательная идея
00:18:07
иметь этот действительно ценный код
00:18:09
правильно это действительно бизнес фокус
00:18:12
основной фокус чистый код
00:18:14
сейчас, если бы я был подлым человек, а я нет,
00:18:17
то я бы показал вам этот слайд, я
00:18:18
буду очень краток, так что
00:18:20
я имею в виду, что иногда вы понимаете, что
00:18:22
ваша реальная ценность
00:18:25
заключается где-то в другом месте, я имею в виду, что это
00:18:27
может выглядеть не так круто, если
00:18:29
вы рисуете диаграмму, но иногда
00:18:31
обнаруживаете, что много
00:18:33
реальной ценности происходит на уровне базы данных,
00:18:35
или на уровне пользовательского интерфейса, или на
00:18:36
каком-то другом уровне вашего приложения, и
00:18:39
логика предметной области на самом деле не так уж и
00:18:42
сложна,
00:18:43
но логика предметной области обеспечивает только то,
00:18:47
если вот как эта песня звучит странно,
00:18:48
как может предметная область, позвольте мне перефразировать, что
00:18:50
логика предметной области всегда является самой
00:18:52
важной частью, но иногда логика предметной области
00:18:54
не лучше всего реализуется в чистой
00:18:57
объектно-ориентированной базовой модели, иногда
00:18:59
есть лучшие решения для
00:19:01
реализации вашей предметной области модель,
00:19:03
поэтому я думаю, что это два разных способа
00:19:05
говорить о том,
00:19:07
должно ли что-то зависеть от предметной области или нет,
00:19:10
поэтому дизайн должен быть основным, ну
00:19:12
да, конечно, каждый дизайн
00:19:14
должен определяться предметной областью, а
00:19:16
не технологиями,
00:19:18
но если вы понимаете что-то
00:19:20
другое,
00:19:21
когда слышите доменно-ориентированный дизайн, тогда
00:19:23
я скажу нет, не каждый сервер должен
00:19:25
быть построен с использованием технологически нейтрального
00:19:27
объектно-ориентированного ядра, опять же, это не
00:19:29
означает, что у меня есть проблемы с чем-либо из
00:19:31
этого, я имею в виду, возможно, мне нравится объектно-ориентированная ориентация
00:19:33
не так сильно, как 20 лет назад,
00:19:35
но мне все еще нравится, я думаю, что это хорошая
00:19:36
концепция, и опять же, если вы посмотрите на то, как
00:19:39
люди программировали, а иногда и
00:19:41
до сих пор программируют светские беседы, то я
00:19:44
думаю, что у них были те же концепции, что и
00:19:45
у них на самом деле. у них была идея
00:19:47
повсеместного языка, они хотели
00:19:48
уловить основные понятия в
00:19:50
классах и методах, сообщения, которые они отправляли,
00:19:52
они построили красивые системы, в которых было
00:19:54
много таких атрибутов,
00:19:56
так что это классная вещь, и
00:19:57
вы абсолютно можете это сделать,
00:19:59
но вам не обязательно делать это каждый раз,
00:20:02
поэтому позвольте мне предложить вам некоторые
00:20:05
альтернативы или другие способы
00:20:07
построения логики вашей предметной области.
00:20:10
Не дай Бог на самом деле использовать
00:20:12
вашу реляционную базу данных.
00:20:14
Это может стать неожиданностью для какой-то
00:20:16
предметной области. практикующие специалисты по проектированию, но
00:20:18
реляционные базы данных на самом деле довольно
00:20:20
крутая, довольно зрелая технология, они
00:20:22
очень и очень полезны,
00:20:24
если ваше приложение основано на данных, а затем
00:20:26
фактически моделируете ваши данные с точки зрения
00:20:28
таблиц и представлений и связей
00:20:30
между ними, индексов для ключевых ограничений
00:20:33
и всего этого, что вы на самом деле в конечном итоге получается
00:20:35
что-то, что действительно очень удобно
00:20:37
в обслуживании, что действительно имеет
00:20:39
очень высокую производительность, потому что оно делает то, в
00:20:41
чем хороша база данных, поэтому иногда
00:20:43
это может быть отличным выбором для
00:20:45
вашего приложения, на
00:20:47
самом деле я видел и сталкивался
00:20:49
со многими приложениями которые
00:20:52
наивно хотели реализовать как
00:20:55
можно больше на уровне oo и сделали это,
00:20:58
и имели катастрофическую производительность, потому что
00:21:00
они создали массу проблем n плюс одна
00:21:02
при взаимодействии с базой данных, сделали
00:21:04
в памяти много вещей, которые можно было бы
00:21:05
сделать на созданном уровне базы данных
00:21:07
множество проблем, и все это во имя
00:21:09
лучшей архитектуры,
00:21:11
и это немного странно, что вы хотите
00:21:13
поступить правильно, хотите
00:21:14
следовать чистой архитектуре, а в итоге
00:21:16
получаете что-то, что на
00:21:18
самом деле довольно грязно, потому что в конечном итоге у вас
00:21:20
возникает в некоторых местах нужно подправить и проделать множество мелких
00:21:22
трюков, так что, опять же, я
00:21:24
не говорю, что это лучшая
00:21:26
модель, вы знаете, есть
00:21:28
парень, которого я очень рекомендую, по имени
00:21:30
Лукасада в Твиттере, вы можете найти его
00:21:31
очень легко, он пишет jooq,
00:21:34
которая отлично подходит для доступа к
00:21:35
реляционной базе данных как к реляционной
00:21:37
базе данных, а не скрывает ее за
00:21:40
каким-то причудливым механизмом, и он из
00:21:43
тех, кто сказал бы, что это почти
00:21:44
всегда лучшее, что вы можете сделать, если вы
00:21:46
хотите, если вы хотите, чтобы это мнение
00:21:47
последовало ему я просто указываю на это
00:21:49
как на одно очень полезное мнение, которое он мог бы
00:21:52
иметь и которое вы могли бы использовать,
00:21:56
окей, поэтому Шона переписывает, что он также
00:21:57
видит, что этот подход приводит к действительно
00:21:59
сложной целостности данных, говоря, что это
00:22:00
правда, я имею в виду, что это я' Я
00:22:02
на самом деле не уверен, имеет ли
00:22:04
в виду Шон тот, который я здесь предлагаю,
00:22:05
или тот, который я предлагаю, является альтернативой,
00:22:08
потому что это правда, это может быть верно в обоих
00:22:09
случаях, это может быть верно как в гибридном
00:22:10
подходе, так и в чисто
00:22:12
реляционном подходе. так что вам обязательно
00:22:14
нужно следить за тем, что вы здесь делаете,
00:22:16
и я не фанат гигантского беспорядка
00:22:19
хранимых процедур pl sql в какой-то беспорядочной
00:22:21
базе данных Oracle, так что все это
00:22:23
имеет свое место для воспроизведения,
00:22:25
хорошо, так что это было предложение номер один,
00:22:27
номер два,
00:22:29
управляйте этим из пользовательского интерфейса,
00:22:31
управляйте этим, исходя из пользовательского опыта, управляйте этим пользователем,
00:22:34
я имею в виду, что иногда вы не находитесь на той стадии,
00:22:36
когда у вас есть стабильная логика предметной области и
00:22:38
эксперты предметной области, с которыми можно поговорить, потому что экспертов предметной области
00:22:41
не существует тем не менее, поскольку вы
00:22:43
создаете что-то совершенно новое, возможно,
00:22:44
вы создаете программное обеспечение для стартапа,
00:22:46
который должен выяснить, чего
00:22:49
хочет рынок,
00:22:50
вы определенно не находитесь на этапе
00:22:52
создания стабильной модели на
00:22:54
следующее десятилетие. которые вы будете использовать с точки зрения
00:22:56
приложений, на которых вы находитесь на этапе, когда
00:22:58
вы хотите очень
00:22:59
быстро выполнить итерацию, создать что-то и как можно
00:23:01
быстрее представить это реальным пользователям,
00:23:04
я бы сказал, что пользовательский интерфейс имеет гораздо
00:23:06
большее значение, чем думают многие архитекторы,
00:23:09
и Я думаю, что пользовательский интерфейс, фактический
00:23:11
способ подключения к реальным
00:23:13
пользователям домена, также является способом просмотра
00:23:15
управляемого доменом, верно, я думаю, что это на
00:23:17
самом деле самое важное для ваших
00:23:19
реальных конечных пользователей, поэтому вам следует
00:23:21
придавать большое значение опять
00:23:24
же, это единственное, что, конечно,
00:23:26
не так что
00:23:28
считайте это чем-то, что вы, возможно,
00:23:29
захотите сделать во многих
00:23:32
случаях, лично я думаю, что
00:23:34
разработка внешнего интерфейса, разработка, ориентированная на пользователя,
00:23:36
и разработка пользовательского интерфейса не
00:23:37
получают того признания, которого они заслуживают. в значительной
00:23:40
части нашей отрасли, поэтому я думаю, что мы
00:23:42
должны инвестировать больше, каждый должен знать
00:23:43
немного об этом,
00:23:45
так что, возможно, вам следует делать больше, а не
00:23:47
меньше, но опять же, я просто
00:23:49
указываю на это как на одну конкретную
00:23:51
альтернативу, которую вы могли бы использовать к этому
00:23:53
предметному дизайну или базовому дизайну,
00:23:56
но, возможно, это не ваше дело, может быть, это не так,
00:23:58
может быть, у вас
00:23:59
здесь нет проблем с пользовательским интерфейсом, может быть, у вас
00:24:01
действительно очень сложная часть
00:24:03
бизнес-логики, может быть, это действительно
00:24:06
все, сложные взаимосвязи между
00:24:08
основными концепциями, которые действительно
00:24:10
создают здесь ценность, так что, возможно, тогда
00:24:12
ядро, ориентированное на предметную область или дизайн, является
00:24:14
правильным, или, может быть, вы могли бы остановиться на
00:24:16
этом, это альтернатива, я имел
00:24:18
удовольствие сделать два подкаста, один на
00:24:20
немецком один на английском один с моим
00:24:22
коллегой, последний супер-один с Майком, я
00:24:24
сделал оба, я думаю, посмотрите оба на
00:24:26
английском для подкаста по делу,
00:24:28
так что
00:24:29
они оба предложили что-то, что
00:24:31
на самом деле гораздо более математическое,
00:24:33
они оба очень любят функционал
00:24:35
программирование, поэтому их модель заключается в том, что вы
00:24:37
пытаетесь отобразить свою предметную область
00:24:40
в
00:24:42
связную грамматическую связную алгебру, которая
00:24:45
действительно соединяет концепции,
00:24:47
используя правила, которые на самом деле имеют
00:24:50
математический смысл или похожи на
00:24:52
то, к чему вы привыкли из
00:24:53
других математических ветвей, а затем вы на
00:24:55
самом деле Откройте для себя новые концепции предметной области,
00:24:59
правильно применив логику в этой алгебре,
00:25:01
поэтому, если что-то комбинируется в
00:25:03
соответствии с вашими правилами, вы пробуете это,
00:25:05
и это, возможно, то, чего
00:25:07
вы никогда не делали, о чем ни один эксперт в предметной области
00:25:08
никогда не думал, что
00:25:10
можно объединить но как только вы это сделаете
00:25:13
и поговорите с ними, посмотрите, можем ли мы сделать это
00:25:14
так, они говорят: «Ого,
00:25:16
это выглядит круто, мы не думали
00:25:17
об этом,
00:25:18
поэтому мы на самом деле абстрагируем вещи на
00:25:20
другой уровень, вы абстрагируете вещи в
00:25:21
эту математическую модель, которую
00:25:24
я Я почти уверен, что не будет сущностей,
00:25:26
агрегатов и объектов значений, верно,
00:25:27
это другой способ разработки
00:25:29
программного обеспечения, возможно, у вас есть разные способы
00:25:31
перестановок или общих комбинаций, тогда
00:25:34
спасибо за ссылку
00:25:37
и чат относительно публикации
00:25:38
эпизодов подкаста
00:25:40
так что это может быть вариант, или, может быть, вы
00:25:42
захотите использовать этот вариант, может быть, у вас
00:25:44
нет
00:25:46
единой схемы развертывания, у вас
00:25:48
нет единого
00:25:50
программного способа выражения ваших идей,
00:25:52
возможно, вы находитесь в области, где ваш
00:25:54
язык программирования, который
00:25:55
вам доступен, недостаточно мощный
00:25:58
для этого, возможно, в вашем распоряжении нет языка o, может быть,
00:26:01
программирование на C или встроенная система,
00:26:03
или, может быть, вам нужно программировать
00:26:05
одно и то же для нескольких сред так что,
00:26:06
возможно, вы выберете такой
00:26:08
подход, основанный на модели, при котором у вас фактически
00:26:10
будет
00:26:11
модель, отдельная от программного обеспечения,
00:26:13
потому что именно это дает
00:26:15
наибольшую ценность для вашего конкретного
00:26:17
сценария.
00:26:19
Я не предполагаю, что какая-либо из этих
00:26:20
вещей лучше, чем этот доменно-ориентированный
00:26:23
дизайн или дизайн, управляемый предметной областью, я
00:26:26
не предполагаю, что на самом деле я
00:26:28
думаю, что дизайн, управляемый предметной областью, на самом деле имеет
00:26:30
отличное решение для этой концепции, которая представляет собой
00:26:32
эту концепцию,
00:26:35
концепцию контекста, поэтому я говорил об этих контекстах,
00:26:37
если мы снова посмотрим на определение
00:26:39
связи контекста: богатый контекст
00:26:42
— это то, где конкретная модель
00:26:44
определена и применима,
00:26:46
поэтому в моем примере, который у меня был в
00:26:48
начале этой
00:26:49
презентации, у меня были эти три ограниченных
00:26:51
контакта с моделью управления заказами,
00:26:52
моделью бухгалтерского учета и
00:26:54
модель выполнения, каждая из которых имеет свою собственную ценность
00:26:57
в этом конкретном контексте,
00:26:59
и вы можете просмотреть ее и расширить,
00:27:01
включив в нее выбор технологии, правильно,
00:27:04
вы можете решить реализовать вещи
00:27:06
по-разному в каждом из этих
00:27:08
контекстов и решить, что реляционная
00:27:10
модель лучше всего подходит для вашего бухгалтерского учета.
00:27:12
сценарий здесь, тогда как сценарий, основанный на UX,
00:27:14
лучше всего работает для управления заказами, а
00:27:16
тактический DDD лучше всего работает
00:27:19
в качестве стратегии реализации для
00:27:20
области выполнения, меня это
00:27:22
не особо волнует, это всего лишь
00:27:23
пример, верно, это нет, это не
00:27:25
попытка на самом деле предложить что это
00:27:27
хороший выбор для тех, кто работает в
00:27:30
конкретном контексте. Я просто
00:27:32
указываю на то, что вам не обязательно делать что-то
00:27:33
одинаково во всех этих
00:27:35
комиксах,
00:27:37
так что
00:27:38
идея переоценена.
00:27:41
Я думаю, что
00:27:42
этот стратегический ddd - это отличная
00:27:44
отправная точка,
00:27:46
на самом деле я использую это почти все время
00:27:48
иногда я называю это стратегическими DVD
00:27:50
иногда я не использую эту терминологию
00:27:53
иногда я использую ограниченный контекст слов
00:27:54
иногда я этого не делаю на самом деле я
00:27:56
делаю это гораздо дольше и
00:27:58
существует основной дизайн, который не
00:28:00
должен звучать как высокомерное
00:28:02
заявление или означать, что область дизайна
00:28:03
не создает большой ценности, я думаю, что
00:28:05
она создает большую ценность в этом отношении,
00:28:07
так что
00:28:08
это хорошая
00:28:10
тактическая вещь, ддд,
00:28:12
я немного использую менее благоприятно, я думаю, что
00:28:14
это тоже хорошая отправная точка, но
00:28:16
лучше всего рассматривать это как
00:28:17
решение на микроуровне. Я имею в виду, что это один из способов
00:28:19
внедрения систем, и на самом деле это
00:28:21
другой уровень, я не уверен, что это
00:28:23
должно быть частью то же самое обсуждение,
00:28:25
верно, это
00:28:26
другое, что вы можете сделать, на
00:28:28
самом деле вы можете создавать отличные системы
00:28:30
на основе предметной области, я думаю, или вы
00:28:32
можете утверждать, что вы занимаетесь проектированием на основе предметной области,
00:28:33
даже если вы никогда не используете ни
00:28:35
один из стереотипов упоминается в
00:28:37
технической части
00:28:39
книги на DVD или в любом из этих
00:28:40
обсуждений.
00:28:42
Я очень ценю сообщество ddn,
00:28:44
я хочу прояснить это, мне нравятся
00:28:46
люди, которые я очень уважаю, я
00:28:48
веду фантастические дискуссии со многими из
00:28:50
них, некоторые из моих коллег очень
00:28:51
местные части этого сообщества, и это
00:28:54
совершенно нормально, я нет, я не
00:28:55
хочу, чтобы вы знали, это
00:28:57
типично, эти парни все
00:28:59
глупы, и я совсем не знал об этом,
00:29:02
но мне кажется, что иногда есть
00:29:04
тенденция просматривать это единственное решение,
00:29:06
которое как бы подводит
00:29:08
меня к моему резюме, верно, я думаю, что это просто
00:29:10
общий совет,
00:29:12
независимо от того, какова конкретная тема,
00:29:15
вам не следует искать только одну
00:29:17
вещь,
00:29:18
может быть, это что-то, если вы просто
00:29:20
войдите в этот домен, то это
00:29:22
займет некоторое время, если вы здесь какое-то
00:29:23
время, вы, вероятно, знаете, что уже
00:29:25
почти уверены, что
00:29:26
не используете ни одного подхода, ни один подход не
00:29:28
будет соответствовать вашим потребностям в 100
00:29:31
или даже 50 случаях. В правильных случаях
00:29:34
все, что вы изучаете, является дополнением к
00:29:36
вашему набору инструментов и чем-то, что вы,
00:29:38
возможно, сможете использовать. Некоторые вещи вы можете знать
00:29:40
очень хорошо, другие - не очень хорошо, но
00:29:42
тем не менее у вас должен быть большой набор инструментов,
00:29:44
чтобы иметь возможность выбрать что-то, что
00:29:46
соответствует конкретных потребностей, если только
00:29:49
ваша повседневная работа не заключается в
00:29:51
выступлении на конференциях, где кто-то говорит
00:29:53
об одной конкретной теме, я имею в виду, что это
00:29:55
другое, тогда вы можете выбрать одну
00:29:56
и просто придерживаться ее, но если вы
00:29:58
практик общего назначения, который создает
00:30:00
реальные системы для домен, то,
00:30:02
вероятно, вам понадобится более одного подхода.
00:30:06
Рецепты — это отличная отправная точка,
00:30:10
особенно если вы
00:30:12
начинаете что-то с нуля и
00:30:13
не имеете большого опыта, тогда вы,
00:30:15
возможно, захотите следовать рецепту более
00:30:16
внимательно, возможно, на
00:30:18
самом деле может возникнуть какая-то догма ценно
00:30:20
то, что часть вашего обучения
00:30:24
это то же самое, что и с рецептом приготовления,
00:30:25
когда вы делаете это в первый
00:30:26
раз, вы, вероятно, следуете рецепту более
00:30:28
внимательно, чем когда вы готовите
00:30:30
блюдо в десятый раз, тогда вы Я сделаю
00:30:32
гораздо больше вариаций в зависимости от вашего
00:30:34
персонажа, вы можете начать первый
00:30:35
рецепт совершенно с другого,
00:30:37
что бы это ни было, на самом деле это не имеет значения,
00:30:38
так что
00:30:39
следующие правила в начале хороши,
00:30:41
но не продолжайте быть догматичными в
00:30:43
долгосрочной перспективе
00:30:45
и я думаю, что для меня самое
00:30:46
важное - это использовать те контексты, которые являются наиболее
00:30:48
ценным вкладом, поскольку своего рода
00:30:51
сферы принятия решений используют их,
00:30:53
чтобы дать вам
00:30:54
границу, в пределах которой вы можете принимать решения
00:30:57
иначе, чем все остальные, и
00:30:58
это, я думаю, очень полезная вещь. сделай
00:31:00
и помогу тебе принять множество
00:31:02
решений,
00:31:04
окей, это все, что у меня есть.

Описание:

This presentation was recorded at GOTOpia Chicago 2021. https://gotochgo.com/2024 Stefan Tilkov - Co-founder & Principal Consultant at INNOQ ABSTRACT Yes, there is a life beyond DDD. In the best sense of pattern languages, domain-driven design gives clear names to things that many developers and designers know how to do, but cannot reliably and compatibly communicate about. But like other very popular approaches, it is sometimes treated as if it were the only viable design strategy. In this talk we’ll look at DDD’s contributions as well as some of the misunderstandings and misuses that come with the hype surrounding it. We’ll try to derive some useful guidelines for treating domain-driven design in particular, and software design hypes in general [...] TIMECODES 00:00 Intro 00:26 What is DDD? 04:27 Key aspect 1: Ubiquitous language 04:52 Key aspect 2: Tactical patterns 06:13 Key aspect 3: Strategic design 07:00 Bounded contexts 09:29 Conceptual extensibility 15:15 Should design be domain-driven? 26:30 Contexts revisited 27:38 Is DDD overrated? 31:05 Outro Download slides and read the full abstract here: https://gotochgo.com/2021/sessions/1778/is-domain-driven-design-overrated RECOMMENDED BOOKS Simon Brown • Software Architecture for Developers Vol. 2 • https://leanpub.com/visualising-software-architecture Mark Richards & Neal Ford • Fundamentals of Software Architecture • https://www.amazon.com/Fundamentals-Software-Architecture-Comprehensive-Characteristics/dp/1492043451?language=en_US Gregor Hohpe • The Software Architect Elevator • https://www.amazon.com/Software-Architect-Elevator-Redefining-Architects/dp/1492077542?s=books&language=en_US Michael Keeling • Design It! • https://www.amazon.com/Design-Programmer-Architect-Pragmatic-Programmers-ebook/dp/B077FHD78B?s=books&language=en_US George Fairbanks • Just Enough Software Architecture • https://www.amazon.com/Just-Enough-Software-Architecture-Risk-Driven/dp/0984618104?s=books&language=en_US Nick Rozanski & Eoin Woods • Software Systems Architecture • https://www.amazon.com/Software-Systems-Architecture-Stakeholders-Perspectives/dp/B00C7GBGN0?s=books&language=en_US Peter Coad, Eric Lefebvre & Jeff de Luca • Java Modeling In Color With UML • https://www.amazon.com/Java-Modeling-Color-UML-Enterprise/dp/013011510X?language=en_US Eric Evans • Domain-Driven Design • https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215?language=en_US Grady Booch, James Rumbaugh & Ivar Jacobson • The Unified Modeling Language Reference Manual • https://www.amazon.com/Unified-Modeling-Language-Reference-Manual/dp/020130998X?language=en_US https://twitter.com/GOTOcon https://www.linkedin.com/company/goto- https://www.facebook.com/unsupportedbrowser #DDD #DomainDrivenDesign #SoftwareArchitecture #UX #UI #Udriven Looking for a unique learning experience? Attend the next GOTO conference near you! Get your ticket at https://gotopia.tech/ SUBSCRIBE TO OUR CHANNEL - new videos posted almost daily. https://www.youtube.com/user/GotoConferences/?sub_confirmation=1

Готовим варианты загрузки

* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Is Domain-Driven Design Overrated? • Stefan Tilkov • GOTO 2021"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Is Domain-Driven Design Overrated? • Stefan Tilkov • GOTO 2021" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Is Domain-Driven Design Overrated? • Stefan Tilkov • GOTO 2021"?mobile menu icon

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

mobile menu iconКак скачать видео "Is Domain-Driven Design Overrated? • Stefan Tilkov • GOTO 2021" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Is Domain-Driven Design Overrated? • Stefan Tilkov • GOTO 2021"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Is Domain-Driven Design Overrated? • Stefan Tilkov • GOTO 2021"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.