Валюта является ценным объектом или нет - PullRequest
0 голосов
/ 17 апреля 2011

У меня есть агрегат Person, который является корневым агрегатом

public class Person 
{
    private int id;
    private readonly PersonID personID;

    private readonly string email;
    private readonly string firstName;
    private readonly string lastName;

    private readonly string username;
    private readonly string password;
    private readonly Address BillingAddress;
}

public class Currency : IValueObject<Currency>
{
    private string name;
    private string currencyCode;
    private decimal rate;
    private string displayLocale;
    private string customFormatting;
    private int displayOrder;
    private bool primaryExchangeRateCurrency;
    private bool primaryStoreCurrency;

    //<summary>
    //Gets or a value indicating whether the currency is primary exchange rate currency
    //</summary>

    public bool IsPrimaryExchangeRateCurrency
    {
       get
       {
           return primaryExchangeRateCurrency;
       }
    }

   /// <summary>
    /// Gets or a value indicating whether the currency is primary store currency
    /// </summary>

    public bool IsPrimaryStoreCurrency
    {
         get
         {
                return primaryStoreCurrency;
         }
    }
}

, и класс Currency, на который следует ссылаться в классе Person.

Так что теперь, если сущность Person создана, нам нужно также связать ее с валютой. Но среди всех созданных валют, я хочу знать, какая из них по умолчанию основная валюта хранилища .Я не хочу знать это через Person, потому что он содержит только одну валюту.Я хочу получить валюту PrimaryStoreCurrency из всех созданных валют физических лиц.

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

Итак, я могу создать валюту как отдельный агрегат?

Ответы [ 2 ]

4 голосов
/ 17 апреля 2011

Следующая цитата от Эрика Эванса, где он описывает, что такое Объект Значения:

Объект, который представляет описательный аспект домена без концептуальной идентичности, называется ОБЪЕКТОМ ЦЕННОСТИ.ЦЕННЫЕ ОБЪЕКТЫ создаются для представления элементов дизайна, о которых мы заботимся только о том, кем они являются, а не о том, кем или чем они являются.

Еще одна ссылка на это - статья MSDN о Домене, управляемомДизайн , написанный Дейвом Лариби, где он говорит:

Значимые объекты - это дескрипторы или свойства, важные в области, которую вы моделируете.В отличие от сущностей, они не имеют идентичности;они просто описывают вещи, которые имеют идентичность.Вы изменяете сущность под названием «тридцать пять долларов» или увеличиваете остаток на счете?

Используя эти две ссылки, я бы сказал, что Валюта должна быть Объектом Значения, а не сущностью,Валюта не имеет какой-либо идентичности во времени - это описательное свойство сущности человека - валюта, в которой они предпочитают выставлять счета, я полагаю.

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

Еще один приятный пост, который может вам помочь, был написан Джимми Богардом


После вашей дополнительной информации:

Я бы все же сказал, что Валюта лучше всего смоделировать как Объект Значения - он все еще кажется неизменным.

Когда вы загружаете свой агрегат Person, вам требуется, чтобы часть этого запроса загружала Объект Значения Валюты, который являетсяосновная валюта магазина.

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

4 голосов
/ 17 апреля 2011

Если вы подразумеваете под Валютой определение валюты в приложении, например, USD, EGP, EUR и т. Д., Это должен быть объект многократного использования. Если вы имеете в виду сумму денежных сумм, например 1000 долларов США, это объект стоимости, инкапсулирующий сумму и тип валюты.

...