我遇到了类似于下面的理论情况的问题,我希望遵循行业最佳实践。
用例:
用户可以根据提供的服务的固定金额或百分比向员工提示。
UI:
将向用户提供要求百分比或$和值的下拉列表。然后给用户一个文本框以输入金额。
问题:
在引擎盖下,你会有两个单独的值 - 一个用于百分比,一个用于美元,或者你只有一个值,其含义由枚举值决定? (或者你会做别的什么吗?)
答案 0 :(得分:2)
如果您正在谈论 ViewModel ,我会选择一个值和一个枚举,因为它直接对应于您的视图(文本字段和下拉列表)。
在这种情况下,我认为相同的结构对于持久性/域模型层是有意义的,因为您必须使用基于枚举的不同逻辑。但是,我还会存储计算出的最终金额。这是多余的,但对于任何类型的计费/会计系统,使用不可变值(不受解释)和有关如何计算该值的“历史记录”是有帮助的。
但是,我没有看到很多可重复使用的模式。这取决于环境的一些细节;根据您的UI库,不同的方法可能会更好。
答案 1 :(得分:1)
您可以创建一个值类型来表示用户输入的内容:
这也可以是一个带有getter和setter的类,因此可以进行数据绑定。
struct ServicesRenderedValue
{
public readonly decimal Value;
public readonly Unit Unit;
}
enum Unit
{
Percentage,
Dollars,
}
答案 2 :(得分:0)
我会选择不同的值。存储具有上下文相关含义的值是没有意义的,如果没有正确地观察到值和枚举之间的关系,则可能会导致进一步的错误。
答案 3 :(得分:0)
我会使用一个值,其含义由组合选择决定。如果您只使用其中一个值,则不需要两个值。
答案 4 :(得分:0)
一种可能性是有一个接口Tip,有两个类实现它:PercentageTip(带百分比)和AbsoluteTip(带有美元值)。例如,Tip接口定义了一个属性DollarAmount,以便您知道应该从钱包中取出多少钱。
答案 5 :(得分:0)
对于它的价值,我看不出有什么意义使用存储用于计算小费的方法的细节水平使其复杂化。我只是存储计算的值。您唯一关心的价值可能是“应该向提示支付多少钱?”所以只需存储财务金额。
我的理由是,如果由于某种原因,没有提示更改的总数不应影响从客户那里获取的金额。