【问题标题】:C# best practices [closed]C# 最佳实践 [关闭]
【发布时间】:2011-12-13 14:41:06
【问题描述】:

我遇到了类似于以下理论情况的问题,我希望遵循行业最佳实践。

用例:
用户可以根据固定金额或所提供服务的百分比给员工小费。

用户界面:
用户将获得一个下拉菜单,询问百分比或 $ 和一个值。然后会为用户提供一个文本框来输入金额。

问题:
在底层,你会拥有两个独立的值——一个代表百分比,一个代表美元,还是只有一个其意义由枚举值决定的值? (或者你会做其他事情吗?)

【问题讨论】:

  • 在这里寻求“行业最佳实践”是荒谬的。这完全取决于您的要求

标签: c# .net design-patterns


【解决方案1】:

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

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

但是,我没有看到太多可重用的模式。这取决于环境的许多细节;根据您的 UI 库,不同的方法可能会更好。

【讨论】:

    【解决方案2】:

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

    这也可以是一个带有 getter 和 setter 的类,因此可以进行数据绑定。

    struct ServicesRenderedValue
    {
        public readonly decimal Value;
        public readonly Unit Unit;
    }
    
    enum Unit
    {
        Percentage,
        Dollars,
    }
    

    【讨论】:

      【解决方案3】:

      我会选择不同的值。存储具有上下文相关含义的值是没有意义的,如果没有正确观察值和枚举之间的关系,可能会导致进一步的错误。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            对于它的价值,我看不出将它与存储用于计算小费的方法的详细程度复杂化有什么意义。我只是存储计算的值。您关心的唯一价值可能是“应支付多少小费?”所以只需存储财务金额。

            我的理由是,如果由于某种原因,不计小费的总额发生变化,那不应该影响从客户那里作为小费收取的金额。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-02
              • 2010-10-06
              • 2011-10-28
              • 2010-09-10
              • 2011-10-11
              相关资源
              最近更新 更多