Domain-Driven Design: Tackling Complexity in the Heart of Software Эванса — лучшая книга о проектировании действительно больших enterprise-приложений, что я читал. Видимо это мнение разделяют многие другие разработчики и проектировщики, потому что Entity и ValueObject, Repository и Specification встречаются почти в каждой большой кодовой базе. Но вот незадача, Ubiquitous Language (единый язык) и Bounded Context (контекст предметной области) в чужом коде я не видел ни разу. И здесь зарыта очень большая собака.
Читать полностью »
Рубрика «DDD» - 6
Ubiquitous Language и Bounded Context в DDD
2014-08-11 в 6:53, admin, рубрики: Bounded Context, DDD, Ubiquitous Language, Программирование, Проектирование и рефакторинг, разработкаИнтервью с Дино Эспозито, автором книги «Microsoft .NET: Architecting applications for the enterprise»
2014-07-28 в 10:21, admin, рубрики: .net, cqrs, DDD, event sourcing, framework, Блог компании Luxoft, проектирование, Проектирование и рефакторингДИНО ЭСПОЗИТО
Anemic Domain Model
2014-06-02 в 10:41, admin, рубрики: DDD, Проектирование и рефакторинг, метки: DDDНа фоне своего увлеченного изучения DDD, я прочел статью Мартина Фаулера от 25 Ноября 2003 года Anemic Domain Model. Иногда для лучшего понимания материала я перевожу его на русский язык. Вот я и решил поделиться переводом.
Перевод авторский и местами очень смысловой.Ссылка на оригинал.
В статье есть цитаты из уже опубликованной книги, которая была переведена на русский язык профессионалами, для того что бы улучшить понимание моего перевода я привел цитаты из книги под спойлерами.
На инвайт не претендую, так как он мне не нужен. Но если кто-то думает, что материал достоин инвайта, просто дайте знать в комментариях, мне будет приятно.
Бледная Доменная Модель
Это один из тех анти-паттернов который долгое время окружал нас, а сейчас проявляется еще активнее. Я говорил о этом с Эриком Эвансом и мы оба отметили что он становится все популярнее. И я как сторонник правильной Доменной Модели, считаю что это не есть хорошо.
Entity Framework Code First и Domain Driven Design: защищаем коллекции
2013-06-24 в 12:09, admin, рубрики: .net, DDD, entity framework, Песочница, метки: DDD, entity framework В мире DDD все крутится вокруг домена. Все бизнес правила живут внутри доменных сущностей либо доменных сервисов. Рассмотрим простой случай: есть сущность Категория, у которой есть несколько Подкатегорий. Также есть бизнес правило: нельзя добавить подкатегорию с именем, равным имени корневой категории (просто для примера). Обычно, мы напишем следующее:
Читать полностью »
Проектируем по DDD. Часть 1: Domain & Application
2013-03-22 в 11:26, admin, рубрики: .net, DDD, domain-driven design, Программирование, проектирование, Проектирование и рефакторинг, метки: .net, DDD, domain-driven design, проектированиеxxx: там порог вхождения выше
xxx: тебе на asp.net'е hello world настрогать за 10 минут научиться можно (8 минут на запуск студии, 2 на кодинг)
xxx: на java такое не прокатит
xxx: пока скачаешь одну библиотеку, пока другую, пока их xml конфигом на полметра склеишь, пока маппинг для hibernate настроишь, пока базу нарисуешь, пока веб-сервисы поднимешь
xxx: вроде и hello world пишешь, а уже две недели прошло и всем кажется, что это учетная система для малого бизнеса
© ibash.org.ru/quote.php?id=15446
В серии из нескольких статей я хотел бы на простом, но имеющим некоторые нюансы, примере рассказать о том, как имея готовые domain и application слои реализовать под них инфраструктуру для хранения и извлечения данных (infrastructure for persistence) используя две различные популярные технологии – Entity Framework Code First и Fluent NHibernate. Если вы хотя бы слышали про три буквы DDD и у вас нет желания послать меня на тоже три, но другие буквы — прошу под кат.
Шаблон проектирования «Спецификация»
2013-03-04 в 13:11, admin, рубрики: .net, DDD, Анализ и проектирование систем, паттерны проектирования, Проектирование и рефакторинг, спецификация, метки: DDD, паттерны проектирования, спецификацияПредпринимая попытки постичь DDD вы наверняка натолкнетесь на этот паттерн, который часто тесно используется вместе с другим, не менее интересным, паттерном «Репозиторий». Этот паттерн предоставляет возможность описывать требования к бизнес-объектам, и затем использовать их (и их композиции) для фильтрации не дублируя запросы.
Пример
Давайте для примера спроектируем домен для простого группового чата: у нас будут три сущности: Группа и Пользователь, между которыми связь многие-ко-многим (один пользователь может находиться в разных группах, в группе может быть несколько пользователей) и Message представляющий собой сообщение, которое пользователь может написать в какой-либо группе:
Читать полностью »
Business Natural Languages
2013-02-17 в 18:17, admin, рубрики: bdd, coffeescript, DDD, dsl, KISS, YAGNI, архитектура, ооп, Программирование, Проектирование и рефакторинг, метки: bdd, coffeescript, DDD, dsl, kiss, yagni, архитектура, оопПоскольку идея данного поста родилась у меня независимо от эпопеи с хлебопекарней, хочу вставить и свои пять копеек.
Итак, суть проблемы — поставить программный код в соответствие с бизнес-требованиями. Существуют замечательные методологии и техники, например, Behavior Driven Development (BDD), которые позволяют в декларативном стиле описать требуемое поведение системы (тесты).
Возникает вопрос — зачем описывать как должен работать код, если можно и сам код написать в этих терминах. Почему user story не может быть самой программой.
не код должен генерироваться из модели — модель должна быть кодом
Чтобы не томить читателей сразу перейду от слов к делу. Представим себе язык для программирования вот такого робота:
Warning! Данный пример служит только для иллюстрации идеи и не предназначен для приготовления пищи в реальной жизни. Автор не несет ответственности за вред здоровью нанесенный в результате употребления пищи, приготовленной с помощью данного примера.
Введение в CQRS + Event Sourcing: Часть 2
2012-08-12 в 15:09, admin, рубрики: .net, cqrs, DDD, event-driven, Веб-разработка, Проектирование и рефакторинг, метки: cqrs, DDD, event sourcing, event-drivenВ прошлой статье я начал с основ CQRS + Event Sourcing. В этот раз я предлагаю продолжить и более подробно посмотреть на ES.
В примере который я выкладывал с моей прошлой статьей магия Event Sourcing’а была скрыта за абстракцией IRepository и двумя методами IRepository.Save() и IRepository.GetById<>().
Для того чтобы поподробнее разобраться что происходит я решил рассказать о процессе сохранения и загрузки агрегата из Event Store на примере проекта Lokad IDDD Sample от Рината Абдулина. У него в аппликейшен сервисах идет прямое обращение к Event Store, без дополнительных абстракций, поэтому все выглядит очень наглядно. Application Service — это аналог CommandHandler, но который обрабатывает все комманды одного агрегата. Такоей подход очень удобный и мы тоже на него в одном проекте перешли.
Читать полностью »
Введение в CQRS + Event Sourcing: Часть 1. Основы
2012-06-30 в 20:01, admin, рубрики: .net, cqrs, DDD, domain-driven design, event sourcing, Веб-разработка, Проектирование и рефакторинг, метки: cqrs, DDD, domain-driven design, event sourcingВ первый раз я услышал о CQRS, когда устроился на новую работу. В компании, в которой работаю и по сей день, мне сразу сказали что на проекте над которым я буду работать используется CQRS, Event Sourcing, и MongoDB в качестве базы данных. И этого всего я слышал только о MongoDB. Попытавшись вникнуть в CQRS, я не сразу понял все тонкости данного подхода, но почему-то мне понравилась идея разделения модели взаимодействия с данными на две — read и write. Возможно потому что она как-то перекликалась с парадигмой программирования “разделение обязанностей”, возможно потому что была очень в духе DDD.
Вообще многие говорят о CQRS как о паттерне проектирования. На мой взгляд он слишком сильно влияет на общую архитектуру приложения, что бы называться просто “паттерном проектирования”, поэтому я предпочитаю называть его принципом или подходом. Использование CQRS проникает почти во все уголки приложения.
Сразу хочу уточнить что я работал только со связкой CQRS + Event Sourcing, и никогда не пробовал просто CQRS, так как мне кажется что без Event Sourcing он теряет очень много бенефитов. В качестве CQRS фреймворка я буду использовать наш корпоративный Paralect.Domain. Он чем-то лучше других, чем то хуже. В любом случае советую вам ознакомиться и с остальными. Я здесь упомяну только несколько фреймворков для .NET. Наиболее популярные это NCQRS, Lokad CQRS, SimpleCQRS. Так же можете посмотреть на Event Store Джонатана Оливера с поддержкой огромного количества различных баз данных.
Начнем с CQRS
Что же такое CQRS?
CQRS расшифровывается как Command Query Responsibility Segregation (разделение ответственности на команды и запросы). Это паттерн проектирования, о котором я впервые услышал от Грега Янга (Greg Young). В его основе лежит простое понятие, что вы можете использовать разные модели для обновления и чтения информации. Однако это простое понятие ведет к серьёзным последствиям в проектировании информационных систем. (с) Мартин Фаулер
Читать полностью »
Неоднозначность MVC
2012-05-27 в 20:00, admin, рубрики: DDD, mvc, архитектура приложений, Программирование, метки: DDD, mvc, архитектура приложенийНе нашел блога «веб-программирование», разместил тут. Укажите, пожалуйста, другой блог, если не прав.
Все знают про паттерн MVC.
Постоянно спрашиваю на собеседовании, определение дают похожее. А вот с пониманием проблема — из-за неоднозначности определения (слишком общее). У каждого понимание разное.
Пример. Есть метеостанция. На ней имеется:
— датчики температуры, скорости ветра и давления, преобразующие физические сигналы в электрический (пусть для простоты аналоговый);
— компьютерная модель, делающая предсказания. в нее поступают входные электрические сигналы с датчиков;
— и есть мониторы, которые умеют в разных красивых графиках все выводить.
Задача: разбейте по M,V,C.