Пікірлер
@sergeypoprygin2670
@sergeypoprygin2670 3 ай бұрын
насколько я знаю, паттерн контроллер имеет ничего общего с контроллерами в mvc, паттерн контроллер - это что-то в духе сервисов application уровня, которые компонуют в себе вызов обьектов доменной области, что-то в духе обьекта для вызова бизнес кейса
@alexk5067
@alexk5067 5 ай бұрын
Сейчас, в середине 2024 году, могу скзаать, что ддд как концепт устарел, народ переусердствует и создают просто 3 слоя крайней низкой связанностью, т.е. все идет к полному отделению. Есть те, кто видит ддд только на уровне модуля 2 уровня, а на первом все равно другой шаблон. И есть еще фрэймворки, а после слов, "я против фрэймоворков" сразу видно, что слушаем мы не разработчика, что очередной раз доказывает что ддд нам впихивают не разработчики, хотя Эванс как раз был разработчиком. Сюр.
@alextopsite
@alextopsite 5 ай бұрын
Хороший доклад! Информативный
@FreemanFromSteppe
@FreemanFromSteppe Жыл бұрын
Слава Украине!
@DmitriiSapronov
@DmitriiSapronov Жыл бұрын
Все таки не-анимичные модели лично для меня это ключевое в ДДД, а тут только анимичные :( но все равно спасибо за доклад
@i.am.rossalex
@i.am.rossalex 2 жыл бұрын
Отличный доклад!
@i.am.rossalex
@i.am.rossalex 2 жыл бұрын
Простите за ссылку, но у вас описано очень тяжело... Хотя новое я узнал для себя. Лучший доклад, что я слышал для новичка тут: kzbin.info/www/bejne/qJvXk3avlsh9l9U
@alexandrmakovkin7364
@alexandrmakovkin7364 2 жыл бұрын
спасибо. даже на скорости 2,0 воспринимается отлично
@alieslapatsin5848
@alieslapatsin5848 2 жыл бұрын
08:07 References 10:05 Poka Yoke 14:39 Abstractions are reusable 15:28 Don't write code (that you don't need) 16:38 === GOOD PRACTICES === 18:19 Make state immutable 20:43 Do not use setters 21:52 Optional dependencies 23:26 Avoid public methods 24:30 Avoid logic switch parameters 25:58 All state should be encapsulated 27:53 External access includes subclasses 28:58 Public method is a Transaction 30:59 Do not assume method idempotence 32:39 Assert 34:01 Enforce strict invariants 35:23 No mixed parameters; Value objects 36:55 No mixed return types 37:22 Avoid fluent interfaces 37:53 Make classes final by default 38:25 Avoid using traits 38:57 Disable what you not going to use: cloning, serialization 39:23 Unit testing: CRAP score 41:11 Tools
@edustreamimg
@edustreamimg 2 жыл бұрын
38:25 Avoid using traits
@zond_amond
@zond_amond 2 жыл бұрын
Так себе и представил девелопера: "Бизнес, чет вы херню говорите - идите нафиг". А зп он сам будет себе платить?
@peyator
@peyator 3 жыл бұрын
But... I love Traits 😟
@24Eugen
@24Eugen 3 жыл бұрын
Спасибо
@alexanderbalabin9586
@alexanderbalabin9586 3 жыл бұрын
прежде чем засесть за шабл пр и DDD, не забывайте несколько важных моментов : 1)Как бы вы не пыхтели и не чесали репу громоздя абстракции, через несколько лет это все равно станет старым и непотребным говном. Что и кто бы вам не говорил. Откройте любой крутой проект, написанный 5 - 7- 10 лет назад, посмотрите на яз.конструкции, библиотеки и пр. обвесы. 2) Тема ШП, DDD в большой степени "греет" разного рода консультантов и нужна прежде всего им. 3) Современные тенденции постепенно смещаются к упрощению языков, минимализации абстракции и пр.
@zond_amond
@zond_amond 2 жыл бұрын
все тлен, можно ничего не писать
@maximpavl745
@maximpavl745 3 жыл бұрын
Размазоно все, не интересно
@vlad-os-ddos
@vlad-os-ddos 3 жыл бұрын
А если на микросервисах гуано, то что тогда?))
@olegs7470
@olegs7470 3 жыл бұрын
уже 2021 год, restfull все еще не умер, Graphql еще наверное жив
@olegs7470
@olegs7470 3 жыл бұрын
Да в общем , Graphql + Symfony для тех, кому некуда спешить, и если заказчик платит за это большие деньги. В 90% всем все равно, главное быстрее-быстрее.
@kinordikus
@kinordikus 3 жыл бұрын
Было всё понятно до момента пока не начали задавать вопросы ....))))
@Merk462
@Merk462 3 жыл бұрын
2:17 Представьте себе, что каждый производитель будет делать свои стандарты разьёмов. Блин, чувствую себя таким динозавром )))
@sainmorton
@sainmorton 3 жыл бұрын
Ептаюмать, столько слов которые можно было просто на русском сказать
@alexeykupersthokh
@alexeykupersthokh 3 жыл бұрын
У меня аж смузи из монитора закапало
@eugaleksandr
@eugaleksandr 4 жыл бұрын
Спасибо, полезный доклад.
@denisov1985
@denisov1985 4 жыл бұрын
Интересно слушать
@kdenisinfo
@kdenisinfo 4 жыл бұрын
Какой я хороший поработайте со мной а иначе вы все делаете не правильно - ещё очередная ddd барыга без достаточного опыта
@socialcatalyst2608
@socialcatalyst2608 3 жыл бұрын
Скинь Ютуб с опытным небарыгой ddd
@maksimsergeevich5939
@maksimsergeevich5939 4 жыл бұрын
Интересный и полезный доклад! Спасибо! А подскажите кто-нибудь пожалуйста, как обычно имплементируется сущность User в контексте Пользователя приложения? Что обычно в себе реализует class User большинства проектов? Где User это просто пользователь сайта (админ, посетитель сайта, авторизованный посетитель сайта и тд), который может читать, писать, удалять, обновлять данные. Он что-то вообще должен делать или просто выступает в роли тупого хранилища value-object? Например, я так понимаю, для авторизации, регистрации пользователя обычно делается сервис-класс, который этого юзера регистрирует, авторизует и тд, так как User сам себя не авторизует и не регистрирует. Но что-то юзер должен делать? И, если знаете примеры которые мне могли бы быть полезны (желательно на Typescript/JS), дайте ссылку пожалуйста на Github.
@KyPa187
@KyPa187 4 жыл бұрын
Спасибо за доклад и скелетон
@KyPa187
@KyPa187 4 жыл бұрын
писиар)))
@immaestro87
@immaestro87 4 жыл бұрын
отличный доклад, спасибо
@АндрейГалушко-е9о
@АндрейГалушко-е9о 4 жыл бұрын
Спасибо! огромное!
@danillazarev6318
@danillazarev6318 4 жыл бұрын
Спасибо за доклад
@НикитаКошкин-е9ц
@НикитаКошкин-е9ц 4 жыл бұрын
В ddd косвенно накладываются архитектурные границы где в главе - домен
@ricardo.fontanelli
@ricardo.fontanelli 5 жыл бұрын
Germany > sad examples hahahaha
@dymek
@dymek 4 жыл бұрын
"Anybody knows what defensive driving is? Defensive driving is what Audi drivers DON'T do."
@aleksandrkravtsov8727
@aleksandrkravtsov8727 5 жыл бұрын
топ доклад
@petrkassadinovich2705
@petrkassadinovich2705 5 жыл бұрын
Спасибо за доклад! Используем примерно ту же имплементацию, что показал Артём. Пишем при этом на .Net Core
@trentonturner5820
@trentonturner5820 3 жыл бұрын
I realize it is pretty off topic but do anyone know of a good site to watch new series online?
@nathanaeldiego7292
@nathanaeldiego7292 3 жыл бұрын
@Trenton Turner I watch on flixzone. Just search on google for it :)
@santiagoparker3500
@santiagoparker3500 3 жыл бұрын
@Nathanael Diego definitely, have been using FlixZone for months myself =)
@trentonturner5820
@trentonturner5820 3 жыл бұрын
@Nathanael Diego thanks, I went there and it seems to work :) I appreciate it!
@nathanaeldiego7292
@nathanaeldiego7292 3 жыл бұрын
@Trenton Turner You are welcome =)
@locSob
@locSob 5 жыл бұрын
Начал за здравие.. А потом нить потерялась, начал прыгать с мысли на мысль
@Asiro-S
@Asiro-S 4 жыл бұрын
Даже не сколько начал прыгать с мысли на мысль, а уделил каким-то темам достаточное количество времени (практически пол урока), конкретно Low Coupling & High Cohesion, но всем остальным пробежался вскользь.
@EshkinKot1980
@EshkinKot1980 5 жыл бұрын
Круто, спасибо.
@TheMurtukov
@TheMurtukov 5 жыл бұрын
Как один из меинтейнеров Overblog GraphQLBundle хочу добавить, что схему типов можно писать не только с помощью yaml. Всего имеется 4 различных способа: yaml, xml, GraphQL schema language и аннотации. Сейчас ведутся разработки пятого способа - Type Builder, который позволит генерировать логически связанные типы, например UserInterface, User, UserInput, UserPayload и т.д. Также с момента презентации добавились новые фичи и улучшения, файлы конфигурации могли бы выглядеть проще, так же как и резольверы.
@alexanderbulychev7948
@alexanderbulychev7948 4 жыл бұрын
Не могли бы вы показать как проще можно писать конфиги и резольверы? в большом проекте yaml конфигурация превращается в ад) С помощью php разве нельзя задавать схему?
@TheMurtukov
@TheMurtukov 4 жыл бұрын
​@@alexanderbulychev7948 вы можете создать issue на github'е, я там дам вам все примеры
@solvex8304
@solvex8304 3 жыл бұрын
@@TheMurtukov Так сделали конфиг схемы на php? Я чего-то не нашёл в доке.
@asbestoable
@asbestoable 5 жыл бұрын
иногда часто спрашивают :)
@andriiptashynskyi8089
@andriiptashynskyi8089 5 жыл бұрын
"юзер будет проникать везде" - в этом случае вы потеряете контест, потому что юзер - понятие пришедшее скорее из контекста безопасности приложения, а вот в контексте заказа товаров это уже будет "покупатель"
@chrise202
@chrise202 4 жыл бұрын
И да и нет, при такой архитектуре частенько придется проверять если именно юзер авторизирован совершать дейстие Х. А то что в каждом контектсе Юзер декорируется дополнительными полями и становиться Покупателем, Лидом, КонтрАгентом это тоже верно. Одно другому не мешает.
@rusrb
@rusrb 5 жыл бұрын
Если не чайник можно начинать смотреть с 12:00 минуты )) Спасибо за доклад!
@ivan_lebedev
@ivan_lebedev 5 жыл бұрын
Спасибо за доклад! Не смог мимо ДДД пройти)
@bondarden
@bondarden 5 жыл бұрын
Доклад очень интересный. Лайк. Но микрофон прицепили криво... Громкость дыхания намного выше громкости голоса. Давит на уши сильно.
@codeidphpcommunity9244
@codeidphpcommunity9244 5 жыл бұрын
Спасибо! Да, мы уже решили вопрос с микрофоном)
@ВладимирЧескидов
@ВладимирЧескидов 5 жыл бұрын
Я ожидал еще два года назад, что сообщество веб разработчиков ринется перекидываться на графкьюэл, но потом наткнулся на поддержку проектов, работающих по SOAP протоколу и пыл мой охладел. Использовать Graphql можно и нужно, но надеяться на переход всего сообщества на него - наивно. Будь этот стандарт хоть трижды золотым - инертность масс велика
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
"За инвариантность анемичной модели отвечает Builder". А что в ситуации, когда пытаемся мутировать состояние уже созданного объекта?
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
@Artem Antonenko боюсь, что вы неправильно меня поняли. В любом случае, состояние агрегата как-то мутируется ( это связано с наличием поведения у rich domain объектов). Например, если администратор банит пользователя на форуме, его статус (пользователя) поменяется с "active" на "banned". Как, в подобных ситуациях, паттерн Builder поможет помочь соблюсти инварианты?
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
"Почему мне не понравился Validator Symfony? Потому что невалидные состояния могли у меня проникнуть в логику." Так незачем использовать Validator Symfony для валидации Сущностей. Попытка создать Сущность с невалидным состоянием вполне спокойно может быть прервана с помощью выброса исключения доменного уровня внутри создаваемого объекта (т.к. Information Expert из GRASP).
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
​@Artem Antonenko Symfony Forms и Symfony Validator отлично подходят, чтобы отвалидировать пользовательские данные ( внешний слой ). С доменным слоем инфраструктуру фрэймворка не рекомендовал бы завязывать. "Задача заключается в том, чтобы выявить и устранить невалидное поведение как можно раньше" - Ну, в таком случае, следует дублировать логику валидации в слое представления. Если все-таки задача "выявить и устранить невалидное поведение как можно раньше" не так важна, можно делегировать валидацию доменному слою. Если нужна детальная валидация всех данных, полученных от пользователя, в доменном слое следует использовать Notification Pattern ( как вариант ) martinfowler.com/eaaDev/Notification.html
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
А если HttpMapper будет посылать запрос на эндпойнт, к примеру, регистрации. Придется дополнить BaseMapper интерфейс методом register(по задумке автора) ?
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
В "Слоевой" архитектуре где-то потерялся Application Layer.
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
Все, услышал: "Application находится в Infratructure Layer'е". И как же он туда попал, интересно?
@sdfzghjk
@sdfzghjk 5 жыл бұрын
@Artem Antonenko об application layer Эванс писал в своей книге. Вернон точно говорит об application services (которые находятся а app-layer) в своей книге. Причем и в контексте применения как слоевого стиля, так и гексагонального стиля (ports-adapters) архитектуры. Из того что помню, App layer управляет безопасностью, транзакциями и является прямым клиентом репозиториев. Единственным клиентом app-layer'a является слой UI (presentation).
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
@Artem Antonenko Также дополню ответ Давида Перманова, что благодаря Application Layer мы получаем возможность, представить Presentation Layer, как говорил Дядюшка Боб, в виде плагина. Т.е. один и тот же юзкейс можно исполнять из разных видов ui, без переписывания кода : REST API, SOAP, Web, CLI и прочее. Если же у Вас "Application находится в Infratructure Layer'е", с реюзабельностью юзкейса будут проблемы)
@ivan_lebedev
@ivan_lebedev 5 жыл бұрын
@@SLAv00Ik У Фаулера по моему 11 видов архитектур слоистых описано по версии разных инженеров. Такая абстракция как Application layer может быть избыточна в каких то системах.
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
С каких пор DataMapper является альтернативой Repository?
@sdfzghjk
@sdfzghjk 5 жыл бұрын
@Artem Antonenko kzbin.info/www/bejne/lXSuZn6XnJyYpNk
@valigotech
@valigotech 5 жыл бұрын
@@sdfzghjk Я думаю, active record имелся в виду. Типа active record vs repository. Артем даже сказал "active record" разок.
@SLAv00Ik
@SLAv00Ik 5 жыл бұрын
@Artem Antonenko "Но в целом, использование паттерна Репозиторий как коллекции, в пхп (запрос/ответ подход) не имеют особого смысла" - можно более тезисно?
@ivan_lebedev
@ivan_lebedev 5 жыл бұрын
@@valigotech Репозиторий можно использовать и с ActiveRecord, нет проблем. Это патерны разных уровней. Repository патерн доменной модели, а ActiveReсord патерн персистинга в энергонезависимую БД.
@nikitas9457
@nikitas9457 5 жыл бұрын
Тема интересная, но доклад слушать невозможно из-за неуверенности докладчика
@Kartinglgua
@Kartinglgua 6 жыл бұрын
Слайды: www.slideshare.net/EvgeniyKuzmin2/contract-testing-isolated-testing-of-microservices-with-pactio-evgeniy-kuzmin-smart-gamma