Oop 如何着手设计一个模块?
当你需要设计一个模块时,你通常是怎么做的?到目前为止,我一直在关注它的易用性、API的直观性、可扩展性、性能等等 但对于其他用户来说,在我看来相当简单和直截了当的事情可能过于复杂。虽然这种情况并不经常发生,但有时确实会发生在我们所有人身上(我希望如此) 除了我已经提到的问题之外,在设计类层次结构/API/任何东西之前,在继续编码之前,您是否应该问自己一些问题 如果您认为该问题更适合于上的其他部分,请随意迁移,但我仍然希望得到答案 喝彩。 < P>你应该考虑和Oop 如何着手设计一个模块?,oop,language-agnostic,architecture,coding-style,class-design,Oop,Language Agnostic,Architecture,Coding Style,Class Design,当你需要设计一个模块时,你通常是怎么做的?到目前为止,我一直在关注它的易用性、API的直观性、可扩展性、性能等等 但对于其他用户来说,在我看来相当简单和直截了当的事情可能过于复杂。虽然这种情况并不经常发生,但有时确实会发生在我们所有人身上(我希望如此) 除了我已经提到的问题之外,在设计类层次结构/API/任何东西之前,在继续编码之前,您是否应该问自己一些问题 如果您认为该问题更适合于上的其他部分,请随意迁移,但我仍然希望得到答案 喝彩。 < P>你应该考虑和 关于责任分配应用你的问题很好,有答案
关于责任分配应用你的问题很好,有答案,但非常复杂,答案基本上是编程经验 制作软件有一般的原则,但我认为在这里,在这个简短的回答中,我可以给你一个你可以应用的概念。软件是一个领域的表示(例如,银行软件用于定制金融系统,或者雷达软件用于定制雷达探测的思想和原理)。因此,软件就像一种理论:它完美地符合您所在领域的当前知识,允许推断和扩展。如果有更多的知识可用,则应扩展、完善该理论或使其更具一般性,以适应该新知识,同时仍然适用于以前的知识 因此,所有关于理论的概念都适用:
- 在一个统一的框架中满足您的知识强加的要求,该框架听起来是同质的,并且集成良好李>
- 简单一点,但要寻找您可能更通用的模式,并关注这些模式以实现更好的集成李>
- 不要太简单。如果您的软件不符合要求,则您的理论太有限,必须加以扩展
- 允许您的软件适应新的需求,软件不是一成不变的。它会发生变异和演变,适应新的需求,或者失去不再需要的功能
- “谁负责执行此操作?”
- 此依赖关系是否符合逻辑且需要此对象才能工作,还是由于代码组织不正确而导致的虚假依赖关系
- “这是高级功能还是低级功能?”
- “我在重复这个吗?”
- “我可以在外部代码不知道的情况下在内部更改此对象/层/子系统吗?”
- “我能在不破坏或使过去无效的情况下在未来扩展这一点吗?”
- “我是否可以轻松测试和探测此功能以获得正确的行为?”
- “是否易于理解和使用?”
- “我可以轻松地重新组合我已经拥有的,而不必触碰来实施新的行为吗?”
- “这个功能是孤立的吗?这样我就可以向外界展示它,而无需处理其余大部分代码?”