Объекты в ограниченном контексте в доменно-управляемом дизайне - PullRequest
15 голосов
/ 23 ноября 2011

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

Предоставлено Сотрудником Компании. Например, в контексте отдела кадров у этого человека есть имя, фамилия, адрес, справочный номер заработной платы и банковский счет. Но в контексте учета все, что имеет отношение к делу, это справочный номер заработной платы и банковский счет.

Есть ли у вас объект Employee в контексте HR и тип значения (например, SalariedEmployee) в контексте учета?

class Employee
{
    public BankAccount BankAcountDetails { get; set; }
    public string FullName { get; set; }
    public Address ResidentialAddress { get; set; }
    public string SalaryRef { get; set; }
}

SalariedEmployee класс (??): тип значения сотрудника

class SalariedEmployee
{
    public SalariedEmployee(string salaryRef, BankAccount bankAcountDetails)
    {
        ...
    }

    public string SalaryRef { get; }
    public BankAccount BankAcountDetails { get; }
}

HRService в ограниченном контексте возвращает эту информацию? Или вы используете класс Employee в обоих контекстах?

Ответы [ 4 ]

14 голосов
/ 10 сентября 2013

С http://msdn.microsoft.com/en-us/library/jj554200.aspx:

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

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

3 голосов
/ 24 июля 2012

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

Если HR создает HRM.Employee, может возникнуть событие, которое Бухгалтерия подхватывает и создает Accounting.Employee.

2 голосов
/ 23 ноября 2011

Если необходимо более одного контекста, определенно некоторые вещи можно смоделировать как сущность в одних контекстах и ​​объект значения в другом. Перевод от объекта к объекту-значению обычно прост, но от объекта-объекта к объекту может быть не так просто. От Дизайн, управляемый доменом , с. 337

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

Если контексту «Кадры» когда-либо потребуется задать контексту учета вопрос о конкретном сотруднике, это станет запутанным вопросом.

1 голос
/ 24 ноября 2011

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

Я бы использовал объект значения. Хитрость заключается в том, чтобы правильно определить значение объекта. Я вижу, что они эквивалентны объекту «Типы данных», как целое число является целым числом. Это, конечно, сложно (int16, int32 ...). Но давайте предположим, что это так. Является ли Employee хорошим кандидатом для объекта значения? .... Я так не думаю: (... Вам может не понадобиться такой же набор информации для Employee в ограниченном контексте. С другой стороны, идентификационная информация сотрудника является лучший кандидат (имя, фамилия, отчество ...) Это можно использовать в ограниченном контексте.

Теперь должен ли сервисный уровень вернуть этот объект значения? ... Лично я бы не стал этого делать. Я бы предпочел, чтобы эта возможность повторного использования была определена в моих репозиториях. Совместное использование карт в Nhibernate или общий класс проекции / картографа.

Надеюсь, это поможет:)

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