Большинство приложений, с которыми я работал, используют decimal
для представления денег. Это основано на предположении, что приложение никогда не будет связано с более чем одной валютой.
Это предположение может основываться на другом предположении, что приложение никогда не будет использоваться в других странах с разными валютами. Я видел случаи, когда это оказалось ложным.
Теперь это предположение оспаривается по-новому: новые валюты, такие как биткойны, становятся все более распространенными, и они не характерны для какой-либо страны. Вполне возможно, что приложение, используемое только в одной стране, может по-прежнему поддерживать несколько валют.
Некоторые люди скажут, что создание или даже использование типа только для денег - это «золотое покрытие» или добавление дополнительной сложности сверх известных требований. Я категорически не согласен. Чем более вездесуща концепция в вашей области, тем важнее приложить разумные усилия, чтобы использовать правильную абстракцию заранее. Если вы хотите увидеть сложность, попробуйте поработать в приложении, которое раньше использовало decimal
, и теперь есть дополнительное свойство Currency
рядом с каждым свойством decimal
.
Если вы используете неправильную абстракцию заранее, ее замена будет стоить в сто раз больше работы. Это означает потенциальное внесение дефектов в существующий код, и самое приятное то, что эти дефекты, вероятно, будут связаны с денежными суммами, транзакциями с деньгами или просто с деньгами.
И не так сложно использовать что-то кроме десятичного числа. Google "Nuget Money Type", и вы увидите, что многие разработчики создали такие абстракции (в том числе и я). Это легко. Это так же просто, как использовать DateTime
вместо сохранения даты в string
.