【问题标题】:Need some external advices for designing this class diagram!需要一些外部建议来设计这个类图!
【发布时间】:2011-04-15 12:03:19
【问题描述】:

总结

我必须对一个用 FORTRAN 编写的应用程序进行现代化改造,简而言之,它负责多年的人口统计预测。因此,我有一个初始人口作为输入。这个初始人口是按年龄来分类的,也就是说,每个年龄的所有数字的总和就代表了这一年的总人口。

让我们看看数据几秒钟。

Year: 2009
Age 0: 43786.0000
Age 1: 42997.0000
Age 2: 42656.0000
...
Age 99: 2439.0000

然后,我们必须按照与上述初始人口相同的方式按照一定的死亡率来预测 2010 年,除了它包括死亡率而不是每个年龄的总数。

Year: 2009
Age 0: 0.000213345
Age 1: 0.000212543
Age 2: 0.000201938
...
Age 99: 0.04824421
Age 106: 0.50000000

这个想法是将这些实体分组到类下。我已经设计了一个,不知道是否可以在某些方面进行改进。

目标

简化设计并将统计计算嵌入对象类中,以便在需要时更容易测试和模拟。

实际类图

我觉得它可以改进。为了您的信息和可读性,这里是图表中使用的法语术语的索引:

TauxFeconditeAnnuel -> Annual Fecondity Rate
TauxMortaliteAnnuelle -> Annual Death Rate
PopulationAnnuelle -> Annual Population
SoldeMigratoireAnnuel -> Annual Net Migration
StatistiqueAnnuelle -> Annual Statistic
StatistiqueAnnuelleParSexe -> Annuel Statistic per Sex

我的思考是关于是否在 PopulationAnnuelle 类中包含一个 Death Rate 类实例。存在初始人口年和未来 96 年预测的死亡率。再说了,年人口也得有它的死亡率,而年人口不一定要存在,我才有今年的死亡率。

假设我有 2009 年的初始人口,我还没有预测 2010 年、2011 年、2012 年等的人口,直到 2105 年。然而,我有所有这些年的死亡率预测,人口增长是基于根据这些死亡率来确定哪些人口还活着,以及我们有多少人死亡,等等。

我想把 PopulationAnnuelle 类作为我模型的基类,虽然我觉得 StatistiqueAnnuelle 更适合这个工作,然后让 PopulationAnnuelle 继承它。

问题

  1. 您对我的担忧有何看法?
  2. 根据我希望实现的目标,最佳设计是什么?
  3. 我是否应该使用 StatistiqueAnnuelle 作为基类/接口,并让 TauxMortalite、PopulationAnnuelle 等其他类派生自它,有点像现在设计的那样?

任何可接受的想法都会由我亲自投票。最准确和最有帮助的答案将被接受为我的问题的答案。

感谢您的热心帮助和支持! =)

您能否为我们确定常见的重要用例/场景? (阿德里安 K)

一个常见的可能用例/场景是根据人口增长规划养老金计划的需求。在“预测”了人数之后,您可以计算出将向养老金计划供款的人数和将退休的人数,然后估算出供款人需要支付的资金需求,以便养老金计划的资金将有足够的钱在他们退休后为他们支付退休金等等。

另一种可能的常见情况是保险公司。根据人口增长,有关保险使用的统计数据将使公司能够预测其资金来源的需求,并根据事故退款与每个年龄输入的每月付款确定给定保险金额的每月付款,例如汽车保险.

这个练习叫做估值。

【问题讨论】:

  • 应用程序的业务对象是什么?您提到过基于数据的预测预测——还有别的吗?您能否为我们确定常见的重要用例/场景?

标签: .net architecture domain-driven-design class-design


【解决方案1】:

一些初步的想法:

  • 您随着时间的推移处理数据 - 我对使用目的和名称与年份概念相关的课程感到不安,尤其是当它是您唯一的基于时间的计量单位时。
  • 根据您需要处理的数据量,您可能希望利用报告包或利用您选择的数据库平台,因为这样可以更有效地处理数据。
  • 请记住,数据将经历一个生命周期:是否已清理?您需要估算任何数据吗?等

我的思考是关于 不包括死亡率等级 PopulationAnnuelle 中的实例 类。

在我看来,死亡率是更广泛概念(率?)的子类 - 对数据的修正或影响;出于这个原因,我可能不会明确地将其包含在 PopulationAnnuelle 中。另一种观点是将人口数据传递给“比率”修饰符,而不是将其嵌入人口中。

是的 - 只是想一想 - 我认为您希望尽可能将您的顾虑分开。这就是为什么我询问您需要满足的重要场景 - 例如,我可以看到您想要对 PopulationAnnuelle 做很多不需要甚至不需要死亡率的事情。

更新

如果我理解正确, PopulationAnnuelle 和 MortaliteAnnuelle 源自 假设是一个 StatistiqueAnnuelle 类

嗯——为什么?需要考虑两件事...首先,您是否 100% 确定在应用程序的生命周期内您只需要以年为单位进行处理?在代码中如此深入地构建一年的概念并不是您想要轻易做的事情。

其次,我完全明白年度统计数据包括死亡人数和总人口这一合乎逻辑的想法 - 但我不确定你是否会通过继承在类结构中反映这一点(?)(不是说你不能 - 你'我花了比我更长的时间思考这个问题)。除了反映一种特定的心态之外,继承实际上给了你什么(与它将对你做什么)?

我对它们进行分组的想法是简单地 询问 PopulationAnnuelle 类 明年人口增长,那 它会作为 PopulationAnnuelle 的新实例

这听起来很可疑:要求一个类为其自身生成一个新的不同实例。我可能有一个类/组件“TrendPredictor”(?),它传入了它需要的所有数据(或对数据集的引用)并返回了一些对象。如果你想对此进行更多的趋势预测,那么我想传入和传出相同的类型是有意义的,因此很容易以任何组合将操作串在一起。

我唯一的另一个好处是我会看到那些输入和输出非常愚蠢(因此不需要太多(如果有的话)继承 - 它们听起来更像是数据结构,而不是提供丰富功能的类。

【讨论】:

  • 有趣的想法,阿德里安!我对这个死亡率概念是否包含它有点混淆。您说过,它是更广泛概念的一部分,生育率和男性化率常数也是如此。这些更有可能是统计数据/比率。所以恢复你的想法,如果我理解正确的话,PopulationAnnuelle 和 MortaliteAnnuelle 都来自假设一个 StatistiqueAnnuelle 类,一个专业化是统计率的概念,另一个专业化是人口本身,因此,数字每岁的人。
  • 我对它们进行分组的想法是简单地询问 PopulationAnnuelle 类以了解明年的人口增长情况,并且它将作为 PopulationAnnuelle 的新实例返回给我。除此之外,我认为这闻起来很臭,因为 PopulationAnnuelle 类也将扮演工厂角色,这对我来说似乎不可行,因为我可能会更好地看到另一个类,我们称之为 Valuator,这将有一个方法成员允许我给出 PopulationAnnuelle、TauxMortaliteAnnuelle (DeathRate)、SoldeMigratoireAnnuel (NetMigration) 和 TauxFeconditeAnnuel (FecondityRate) 的实例..
  • 如果你明白我的意思,这将返回一个 PopulationAnnuelle 的实例,这将是明年的投影结果。你对那个怎么想的? (哦,顺便说一下,+1 表示您的意见,这正是我需要在这里进行的反思!谢谢!)
  • 我试图在我的设计中包含一些常见的做法,以回应您对常见场景的询问。我希望我为您选择了好的示例,以更好地理解我必须为其生成解决方案的领域。 =)
  • 感谢您的更新! =) 我同意,它们听起来更像是数据结构而不是真正的类。也就是说,因为处理多维矩阵的实际 FORTRAN 应用程序。我试图让这些矩阵看起来像类,但我还没有说服自己。这是否意味着除了将类用作数据存储库之外,没有什么可做的吗?也许! =) 我同意您的 TrendPredicator 事情并完全理解,这实际上是我想到的第一个途径。也许我只是为了让这些数据结构看起来和行为像类而过于复杂化了?
猜你喜欢
  • 2011-11-13
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 2013-11-26
相关资源
最近更新 更多