如何设计模块?

How to go about designing a module?

提问人:Luchian Grigore 提问时间:10/19/2011 更新时间:10/19/2011 访问量:79

问:

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

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

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

如果您认为该问题更适合 SO 上的其他部分,请随时迁移它,但我仍然想要答案。

干杯。

OOP 与语言无关 的架构 编码风格的 类设计

评论

0赞 jgauffin 10/19/2011
这与代码无关 = 它属于 programmers.stackexchange.com

答:

3赞 Mohamed Abed 10/19/2011 #1

您应该考虑 SOLID 原则这里

关于责任理解,应用GRASP模式

3赞 Stefano Borini 10/19/2011 #2

你的问题非常好,而且有答案,但太复杂了,答案基本上是编程经验。

制作软件有一般的原则,但我认为在这里,在这个简短的回答中,我可以给你一个你可以应用的概念。软件是域的表示(例如,银行软件是为了定制金融系统而制作的,或者雷达软件是为了定制雷达检测的思想和原理)。因此,软件就像一个理论:它完全适合你所在领域的当前知识,允许推理和扩展。如果有更多的知识可用,理论应该被扩展、完善或更普遍,以适应这些新知识,同时仍然对以前的知识保持有效。

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

  • 在一个统一的框架中满足你的知识所提出的要求,这个框架听起来是同质的,而且集成得很好。
  • 要简单,但要寻找可能更通用的模式,并突出显示这些模式以实现更好的集成。
  • 不要太简单。如果你的软件不符合要求,你的理论就太局限了,必须加以扩展。
  • 让您的软件适应新的要求,软件不是一成不变的。它会变异和发展,适应新的需求,或者失去不再需要的功能。

所以,软件应该是简约但不要太多,美观但实用。

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

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

评论

0赞 Luchian Grigore 10/19/2011
很好的答案,谢谢。我知道这需要经验,但我没有那么多经验,所以我试图掌握这些概念。