Oop 如何着手设计一个模块?

Oop 如何着手设计一个模块?,oop,language-agnostic,architecture,coding-style,class-design,Oop,Language Agnostic,Architecture,Coding Style,Class Design,当你需要设计一个模块时,你通常是怎么做的?到目前为止,我一直在关注它的易用性、API的直观性、可扩展性、性能等等 但对于其他用户来说,在我看来相当简单和直截了当的事情可能过于复杂。虽然这种情况并不经常发生,但有时确实会发生在我们所有人身上(我希望如此) 除了我已经提到的问题之外,在设计类层次结构/API/任何东西之前,在继续编码之前,您是否应该问自己一些问题 如果您认为该问题更适合于上的其他部分,请随意迁移,但我仍然希望得到答案 喝彩。 < P>你应该考虑和 关于责任分配应用你的问题很好,有答案

当你需要设计一个模块时,你通常是怎么做的?到目前为止,我一直在关注它的易用性、API的直观性、可扩展性、性能等等

但对于其他用户来说,在我看来相当简单和直截了当的事情可能过于复杂。虽然这种情况并不经常发生,但有时确实会发生在我们所有人身上(我希望如此)

除了我已经提到的问题之外,在设计类层次结构/API/任何东西之前,在继续编码之前,您是否应该问自己一些问题

如果您认为该问题更适合于上的其他部分,请随意迁移,但我仍然希望得到答案

喝彩。

< P>你应该考虑和


关于责任分配应用

你的问题很好,有答案,但非常复杂,答案基本上是编程经验

制作软件有一般的原则,但我认为在这里,在这个简短的回答中,我可以给你一个你可以应用的概念。软件是一个领域的表示(例如,银行软件用于定制金融系统,或者雷达软件用于定制雷达探测的思想和原理)。因此,软件就像一种理论:它完美地符合您所在领域的当前知识,允许推断和扩展。如果有更多的知识可用,则应扩展、完善该理论或使其更具一般性,以适应该新知识,同时仍然适用于以前的知识

因此,所有关于理论的概念都适用:

  • 在一个统一的框架中满足您的知识强加的要求,该框架听起来是同质的,并且集成良好
  • 简单一点,但要寻找您可能更通用的模式,并关注这些模式以实现更好的集成
  • 不要太简单。如果您的软件不符合要求,则您的理论太有限,必须加以扩展
  • 允许您的软件适应新的需求,软件不是一成不变的。它会发生变异和演变,适应新的需求,或者失去不再需要的功能
所以,软件应该是简约但不过分的,美观但实用

在实践这些方向时,我建议你留出时间学习你的领域。你不能对你不理解的东西建模。学习基础知识,从简单的事情开始,然后逐步完善它们。你会偶尔看到一些东西“感觉”在错误的地方。问自己一些问题,比如

  • “谁负责执行此操作?”
  • 此依赖关系是否符合逻辑且需要此对象才能工作,还是由于代码组织不正确而导致的虚假依赖关系
  • “这是高级功能还是低级功能?”
  • “我在重复这个吗?”
  • “我可以在外部代码不知道的情况下在内部更改此对象/层/子系统吗?”
  • “我能在不破坏或使过去无效的情况下在未来扩展这一点吗?”
  • “我是否可以轻松测试和探测此功能以获得正确的行为?”
  • “是否易于理解和使用?”
  • “我可以轻松地重新组合我已经拥有的,而不必触碰来实施新的行为吗?”
  • “这个功能是孤立的吗?这样我就可以向外界展示它,而无需处理其余大部分代码?”

这与代码无关=它属于programmers.stackexchange.com很好的答案,谢谢。我知道这是有经验的,但我没有那么多经验,所以我试着学习这些概念。