2016-11-03 10 views
0

Мне нужна помощь с объектом значения. Рассмотрим следующий пример.DDD как обращаться с объектами ценности без репозитория

У меня есть карточка лица, у которой есть валюта в паре (USD, EUR, GBP) и тип карты (Visa, Visa Electron, Mastercard). Я думаю, что валюты и типы карт являются объектами ценности, и они хранятся в исходном коде. В соответствии с объектами DDD объекты не имеют репозиториев.

  1. Вопрос заключается в том, чтобы заполнить выпадающие валюты и карту типов в интерфейсе при создании новой организации карты.
  2. Где размещать эти классы в слое Application, Domain или Infrastructure и как извлекать данные из них.

Простой пример был бы бесценным»

Update1

Это был мой первый подход, но .. я использую валюты в других организациях, как MoneyTransfer там я использую EUR USD GBP и несколько более того, я должен создать еще один Enum

public enum MoneyTransferCurrency{ 
    USD, EUR, GBP and a few other 
} 

Этот путь я дублирует некоторые валюты, и если мы прекратить обработку payme nts в долларах США я должен найти все перечисления и удалить валюту USD.

+0

http://stackoverflow.com/questions/679005/how-are-value-objects-stored-in-the-database – QuietNaN

+0

Что означает «прекратить обработку платежей в долларах США»? Это означает, что для вашего приложения USD больше не используется для новых транзакций или что все, что имеет доллар США, должно быть удалено? Что произойдет с вашими сохраненными данными при прекращении использования доллара США? Мне кажется, скорее проблема проверки, чем моделирование домена. Подумайте об этом с точки зрения вашего домена. – rascio

+0

Значит, что вы не можете заказать карту в долларах США или вы не можете отправить денежный перевод в долларах США. Ничего не нужно удалять. – Stasa

ответ

1

Не пытайтесь сделать простые вещи сложными.

Если вы знаете априори все возможные значения этих VO, вы можете использовать их как enum.

public enum Currency{ 
    USD, EUR, GBP 
} 

А потом из кода:

Currency.values() 

Спросите себя, как часто эти ценности изменения? (как часто новый тип валюты используется системой?)
Является ли стоимость разработки и поддержки системы (например, таблиц db), чтобы добавить эти значения динамически без перезапуска приложения, чем использование перечисления и перекомпилировать проект когда есть изменения?

Много раз меня критиковали за это решение с такими аргументами, как «Мне нужно описание значения», например, в виде записи «Евро», когда у вас есть значение EUR, если у вас есть таблица, которую вы можете иметь столбец описания.
Это может быть легко решена с помощью файла свойств, как:

labels.currency.EUR=Euro 
labels.currency.USD=Dollars 

Проверьте также это:
- Loading a Value object in List or DropdownList, DDD
- Simple aggregate root and repository question

+0

Спасибо за ваш комментарий. Проверьте update1. – Stasa

1

Вы неправильно поняли VO, прочитайте дополнительную информацию о них, я думаю, что простой способ понять их - это посмотреть пример Person/Addres.

Что о вашем случае, просто создать 3 таблицы, не пытайтесь делать простые вещи сложными:

Card (CardID, CurrencyID, CardTypeID) 
Currency (CurrencyID, CurrencyName) 
CardType (CardTypeID, CardTypeName) 

Для Dropdowns вы просто запрашивающих валюты & CardType таблицы. И в будущем, если вы добавите новую валюту или CardType, это будет легко сделать.

0

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

Подумайте, например, из объекта MonetaryValue значения, которое состоит из числового значения вместе с валютой:

public class MonetaryValue { 

    private BigDecimal value; 
    private Currency currency; 

    public Amount(BigDecimal value, Currency currency) { 
     // validations: 
     assertNotNull(value); 
     assertNotNull(currency); 

     this.value = value; 
     this.currency = currency; 
    } 
    [...] 
} 

значение (например, 100) и валюта (например, евро) совместно описывает ценность вещи. Дело не стоит просто «100», а не просто «eur», а «100 eur».

Важное значение имеет также сравнение значений объектов. Говоря о денежных значениях, как атрибуты, так и стоимость и валюта, нужно сравнивать. Сравнение стоимости без валюты не сильно поможет, так как 100 usd - это не то же самое, что 100 евро. Это еще один признак того, что MonetaryValue может быть объектом разумных значений.

 Смежные вопросы

  • Нет связанных вопросов^_^