C#最佳实践

问题描述:

我有一个类似于下面的理论情况的问题,希望遵循行业最佳实践。C#最佳实践

使用案例:
用户可以根据统一金额或提供的服务的百分比给员工提示。

用户界面:
用户会得到一个下拉问询百分比或$和一个值。用户然后将被给一个文本框输入一个金额。

问:
在系统底层,你将有一个两个单独的值 - 一个用于%,而一个对美元,或者你只是有一个值,其含义是通过枚举值确定? (或者你会做别的吗?)

+7

要求在这里的“行业最佳实践”是荒谬的。这一切都取决于*您的要求*。 – Jon

我会去分开的值。存储具有上下文敏感含义的值并没有任何意义,并且如果值和枚举之间的关系没有被正确观察到,则可能导致错误进一步下降。

如果你在谈论ViewModel,我会选择一个值和一个枚举,因为它直接对应于你的视图(一个文本字段和一个下拉列表)。

在这种情况下,我认为相同的结构对持久性/域模型层有意义,因为您必须使用基于枚举的不同逻辑。但是,我还会存储计算的最终金额。这是多余的,但对于任何类型的账单/会计系统,具有不变的值(不受解释)是如何计算该值的“历史”是有帮助的。

但是,在这里我看不到很多可重用的模式。这取决于环境的许多细节;取决于你的UI库,不同的方法可能会更好。

我会去一个值,其含义由组合选择决定。如果您仅使用其中的一个,则不需要两个值。

一种可能性是有一个接口提示,有两个类实现它:百分比提示(带有百分比)和AbsoluteTip(带有美元价值)。例如,Tip接口定义了一个属性DollarAmount,这样你就知道你应该从钱包中取出多少钱。

对于什么是值得的,我不能看到任何点复杂化与细节水平的存储什么方法是用来计算提示。我只是存储计算的值。你关心的唯一的价值可能是“付多少钱给小费?”所以只需存储财务金额。

我的推理是,如果出于某种原因,总额没有提示更改,这应该不会影响从客户作为提示的金额。

您可以创建一个值类型来表示用户输入的内容:

这也可能是用getter和setter方法类,使数据绑定是可能的。

struct ServicesRenderedValue 
{ 
    public readonly decimal Value; 
    public readonly Unit Unit; 
} 

enum Unit 
{ 
    Percentage, 
    Dollars, 
}