2 回答
TA贡献1906条经验 获得超3个赞
您已经正确地识别了问题,无论理论原理如何,这显然都需要解决。但好吧,我们先讨论 SRP:
SRP 引用了两个较旧的概念,即耦合和内聚。不幸的是,“SRP”这个名字令人困惑、含糊不清,并且只包含等式的一方面,即分割东西。它没有提到属于在一起的东西实际上应该在一起。
因此,这一切的目的是实现可维护性,这是减少未来工作的简写。要做到这一点,相互引用的事物实际上应该在一起似乎是合理的。这意味着处理某些数据的方法应该与该数据位于同一位置(即在同一对象中)。松散相关的内容(即很少互相引用)应该分开。
在实践中如何做到这一点取决于业务案例,并且并不总是显而易见的。我建议做一个练习。把这些东西放在一个类中,称之为Player
例如。简化它,删除所有 setter/getter 和间接。然后尝试查看是否存在仅松散地相互引用的区域,或者仅在一个方向上引用的区域。这些将是很好的候选者。
尝试分割有意义的东西而不是技术性的东西,即,,,Movement
都是好的,,,都是有问题的(尽管并不总是坏的)。Attack
Player
Controller
Animation
TA贡献1815条经验 获得超6个赞
听起来您所指的内容与 SRP 无关。从最基本的角度来说,SRP 意味着您拥有的任何类都应该只“负责”一件事。您PlayerInput
负责跟踪玩家通过其接口设备提供的内容,PlayerController
根据多种因素提供有关玩家的状态信息,等等。
您似乎指的是与 DRY(不要重复自己)原则更相关。DRY 很棒,它为抽象和代码重用提供了强大的支柱,但这并不是福音。事实上,SOLID 原则之一——依赖倒置原则——在某种程度上积极鼓励人们以灵活性的名义重复自己。
如果您认为对某个方法的调用过多,则可以考虑将对该方法的一系列调用以及任何中介逻辑包装在另一个方法中,然后调用该方法。当然,这取决于需要在多个位置调用同一组指令。
现在,我要说的是,您的帖子中跳出的一部分是您的AnimationController
和 、PlayerController
和PlayerMovement
类之间的循环引用。这实际上违反了 SRP 和其他一些良好设计的原则,因为封闭的类现在负责分配给他们的任务,并且至少跟踪 中发生的事情,并且在最开始的时候AnimationController
。大多数,调用自身的方法AnimationController
。
您应该考虑重构更细粒度的类,以便无论发生什么情况它们都能够完成自己的工作AnimationController
,反之亦然。封闭类应该处理告诉封闭类要做什么的逻辑,本质上是为封闭类做出决定。
- 2 回答
- 0 关注
- 90 浏览
添加回答
举报