我正在做一个简单的项目来管理桌面游戏的数据,但我主要使用它来获得有关正确编码的经验。
我刚刚达到了一个点,即我有五个紧密耦合的类,我不确定是保持原样还是重构。
我所拥有的基本上是这样的:
- class
ShipTemplate
:这个类(与 c++ 模板无关)具有所有常量成员,并包含有关 Ships 类别的基本信息。 - class
TemplateSet
:此类包含当前可构建的所有 ShipTemplates,并且它有一个名称。它应该是独立的,因为它代表了每个玩家在任何时候都可以使用的技术,因此可以在不同的时间保存/加载不同的集合。 - class
Ship
:这个类代表一艘完整的船,带有装载、名称和其他东西。它包含对 ShipTemplate 的 const 引用,该类不允许更改,以引用其基本功能。它可以扩展 ShipTemplate,但我想跟踪哪些 Ships 具有特定的底层 ShipTemplate,这样做似乎更容易。 - class
Fleet
:这个类包含一个船舶列表,它有一个名称并包含其他信息。它应该包含一个成本变量,等于其中所有船舶成本的总和。 - class
Deployment
:此类包含指向玩家可用的所有 Ships、Fleets 和 TemplateSet 的指针。它还需要跟踪不再可用的 ShipTemplates,但仍然由已建造的 Ships 使用。它应该包含一个成本变量,该变量等于玩家可用的所有船舶成本的总和。它必须管理船舶从一个舰队到另一个舰队的转移。它必须找出给定舰队中的哪些船舶,或者哪些船舶具有给定的 ShipTemplate。
不幸的是,每个班级都与其他班级紧密相连。我想过不同的方法,但我不确定其中一种是否正确。
- 到处使用
friend
语句,这样如果一个类修改了某些内容,它就可以正确更新所有其他类。 - 使用非常长的名称,例如
Deployment::modifyShipThrustInFleet
,并允许仅通过 Deployment 类进行任何修改,这将处理所有事情。 - 删除 TemplateSets 和 Fleet 并在 Deployment 中表示它们,以便它可以正确更新成本值/指针,而不会破坏任何“正确性”规则。这也意味着对系统的每一次修改都必须通过部署。
- 将指向上层类的指针插入到下层类中,例如,当更改 Ship 中的某些内容时,它可以自动更新其 Deployment 和 Fleet 的成本。
是否有其他一些我没有看到的解决方案,或者重构为更多类来帮助我实现可读、可维护的代码?