首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重构并行继承树?

如何重构并行继承树?
EN

Software Engineering用户
提问于 2023-02-06 14:28:27
回答 1查看 88关注 0票数 0

我有一个(php)程序,必须每年进行更改。这个计划每年都要计算税收,而且有时要求也会发生变化。首先,用户填写他们的收入、费用等,然后单击下载按钮,为他创建一个xml文件。

下载类使用Calculator类来计算全部税收结果。唯恐我有五种计算器。(每个税务报告部分有一个计算器) CalcTaxBase,CalcTaxFree,CalcEtc.

在第一年中,我创建了类CalcTaxBase13 13 ans等等。taxBase计算器有r1()、r2()和r3()方法。

明年,taxBase中没有任何变化,所以我从以前的一年类中创建了<>CalcTaxBase14 14扩展。(有一个年份属性,我使用它来加载一些参数,当然,每年都会改变)

然后在2015年,我不得不重载r3()并将r4()添加到CalcTaxBase15 15

我创建这个层次结构是因为通过这种方式,我可以重用前几年的非更改方法,并且只实现更改或新方法,但我对此有更多的问题。

  1. 现在,这是一个噩梦,快速发现,在哪一年,我有最近的r3()。有了代码导航,它会更好,但我必须跳过去,每次需要找到一些东西。
  2. 由于每年的变化,我有相同的下载类层次结构。2013年,我不得不将taxBas13.r1()传递给taxFree13.r1,但2年后,我不得不将taxBase.r4()传递给其他计算器,这是在下载类中完成的。下载类向我的计算器输入输入,然后使用它们的结果生成xml。
  3. 我不能在我的下载类方法中使用类型定义,因为(假设Download.configureTaxBase($taxBase))需要TaxBase13,但是Download14.figretaxBase($taxBase)在14年需要这样做。(我现在用docblocks实现了),因为我不能引用接口,因为在新的年份我将有新的方法。

希望这对你有意义。有人能给我推荐一些更好的设计吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2023-02-06 16:21:50

这听起来是一种更好的方法,可以实现一个具有有效日期限制、节适用性和排序键的业务规则列表。然后,对于每一节,您将执行适用的规则,其有效范围涵盖计算税收的日期。

节类将随着时间的推移而演变,以存储新引入的数据,但是您只需要一个当前版本,因为它能够代表规则在前几年所需的一切。

我不确定我是否理解下载类的用途--对我来说,它读起来好像做得太多了,您可能希望将运行计算器与创建XML文件分开,

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/443817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档