2011-06-08 134 views
5

人们经常会读到如何设计代码以避免需要进行强制转换,以及如何发现自己需要强制转换可能表明存在更好的实现。我试图在虚拟世界引擎的实现中实现这个“无投入代码”的圣杯,其中许多对象具有各种各样的接口,充当许多不同形式的中介和数据(有时作为两者) 。正如在类似问题中提到的一个答案(Linkage),其目标是始终在所需位置具有正确类型的参考/指针,而不是试图从大范围的候选对象中挖出一个。避免动态强制转换的架构策略

我最近在管理这个大问题时涉及到对象与其中介的注册,它在控制粒度方面具有一些很好的优势(您可以在运行时配置中介与其目标之间的多对多映射)。

还有一些问题......我目前看到的最大的问题是撤销调解员目标。为了跟踪谁在使用什么而不必轮询每个可能的中介者,程序需要存储更多关于创建链接的数据。一方面,调解员可以简单地通过检查他们的目标是否过期来断开自己(我使用智能指针和弱指针来做所有事情,所以这并不困难),但是这只是处理对象的过期并且确实没有建立有意义的行为重构框架。

从远处看时,这只是另一种软件,可以在时间和内存之间进行权衡。存储更多数据以减少计算量。

我想问你关于构建程序以避免动态强制转换的想法,以及如果你能分享在这些情况下有效的任何策略/模式。

+0

我不确定你的场景描述与这个问题有什么关系? – 2011-06-08 21:32:34

回答

3

这是一个根本上有缺陷的提议。 dynamic_cast存在的原因。试图瞄准无代码的代码只是天真的代码服务的目的。当然,尽可能减少它们可能是最好的办法,但这与禁止它们非常不同。没有dynamic_cast的代码不是某种圣杯,要么它不需要它,在这种情况下,它只是代码,或者它确实需要它,在这种情况下,它是不理想的代码。

但是,为了保持一个更多的话题,我个人发现,只是没有传播像瘟疫一样的继承,我试图造成启示录,那么对铸造的需求是有限的 - 模板是一个奇迹在这里。

+0

好点。确实很少(如果有的话)绝对规则在开发中。看起来,传播继承越多,获得的通用性就越高,但当然会带来更多的复杂性。 – EdF 2011-06-08 21:54:08