加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 无逻辑类:代码嗅觉或丑陋的系统事实?

发布时间:2020-12-15 22:01:53 所属栏目:百科 来源:网络整理
导读:我在一个应用程序上工作,该应用程序部分地计算税单金额.税单由许多可计算的字段(警长费,文员费,罚金,利息,统一费率等)组成,其计算方式通常是静态的,但可能因立法或特殊账单属性而改变.随着时间的推移,也可以删除或添加所有类别的计算. 为了将分支逻辑的混乱
我在一个应用程序上工作,该应用程序部分地计算税单金额.税单由许多可计算的字段(警长费,文员费,罚金,利息,统一费率等)组成,其计算方式通常是静态的,但可能因立法或特殊账单属性而改变.随着时间的推移,也可以删除或添加所有类别的计算.

为了将分支逻辑的混乱推离客户端,我为每个计算类别编写了一个工厂,在给定账单信息的情况下应用适当的计算,如此(CalcType是枚举):

var bill = new Bill(){year = 2013};
bill.AdvertisingFee = CalculationFactory.GetFee(CalcType.AdvFee,bill);

这很简单,但我对我的一些具体课程的实施方式感到困扰.这是计算界面:

public interface ITaxCalculation{
    decimal Calculate();
}

典型的实现将具有某种计算或数据访问权限,但某些年份/账单属性不产生广告费,如下所示:

public class FinanceCabinetAdvertisingFee : ITaxCalculation
{
    public decimal Calculate()
    {
        return 0.00M;
    }
}

由于各种原因(税收年度不存在计算,国家购买账单等),这种存根类将存在于许多但不是所有计算类别中.

我的问题:像这样的无逻辑类是否被认为是代码气味,或者仅仅是对某些不稳定的真实世界系统进行建模的丑陋事实?我喜欢将这些案例牢记在一个类中而不是作为某些控制结构的默认返回值的想法,但我对这种问题的应用错误的模式应用的想法持开放态度.欢迎任何其他想法.

解决方法

我会将这样的神奇值放在数据库或配置文件中,如果要将其隐藏起来,可能会加密.然后这个类将是一个数据访问类,并且在需要时更容易和更模块化地对值进行更新.

代码中的硬编码数据有时是必要的,但它可能不是最佳选择.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读