Я видел то же самое во многих местах, так что пока я не видел объяснения, почему.Что хорошего в этом?Это не то, как люди ведут бизнес или как работает логическая система.Если я веду международный бизнес из США, мои системы по-прежнему будут иметь внутреннюю основу доллара.
Валюта важна как граничное условие для события, когда вам нужен обменный курс.Даже международный банк.В настоящее время я отправляю все свои деньги на лекарства, доллары США, на Кайманы, где мои деньги доступны мне, также в долларах.Может быть, у вас в евро.Таким образом, они получают это, и что они делают, так это конвертируют их в любую валюту, которую они используют внутри, морские раковины, что угодно.Теперь они должны идти в ногу с этим, но что они должны знать в любой момент времени, так это обменный курс между долларами / морскими раковинами, чтобы узнать, сколько они мне стоят, и морскими раковинами / евро, чтобы узнать, сколько онидля вас.Эта маленькая гадость не делает для них приседания и не является ценностным объектом, как это могло быть?Валюта в этом случае будет фиксированной на уровне счета, а не куча таких вещей.
Обычно валюта будет фиксироваться чем-то другим, как вы заметили, на уровне строки.Строка данных связана, вы должны быть в состоянии сделать математику с денежными значениями, и в этом случае валюта в строке должна быть одинаковой.Возможно, я занимаюсь бизнесом в Европе, и мне приходится цитировать в евроЯ мог бы захотеть записать для исторических целей котировку против оплаты в обеих валютах.Я подвергаю сомнению, является ли это проектом с одной строкой, но если бы я решил, что описываемый вами объект Money является объектом с одним значением и двумя компонентами.Его следует рассматривать как единое целое, и я думаю, что то, что я здесь описываю, семантически отличается от объекта «Деньги» и может также быть явно описано в столбцах десятичной дроби / валюты, которые мы не пытаемся объединять в единые деньги;значение, потому что они не могут быть сравнены или математические вычисления были сделаны на них.
Я бы просто не пошел этим путем, потому что это приводит к запутанным тонким несоответствиям в семантике и, вероятно, ничего не добавляет.Где вы когда-нибудь действительно будете использовать это, чтобы строчная валюта не давала вам того же, обычно более рациональным способом?
Но если менеджер настаивает на том, чтобы вы делали что-то, что в корне бессмысленно или хужеВ терминах NHibernate вы объявили одну атомарную сущность Money, в которой есть 2 компонента: десятичная дробь и строка.Поскольку деньги теперь представляют собой единичную атомную единицу, вы должны всегда иметь оба столбца для каждых денег, поэтому для избежания дублирования столбцов не существует обходного пути.