【问题标题】:How to go about designing a module?如何着手设计一个模块?
【发布时间】:2011-12-10 20:24:27
【问题描述】:

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

但对我来说似乎相当简单直接可能对于其他用户来说似乎过于复杂。虽然它不会经常发生,但有时确实会发生在我们所有人身上(我希望如此)。

除了我已经提到的问题之外,在设计类层次结构/API/任何其他内容之前,您还有什么问题需要问自己吗?

如果您认为该问题更适合关于 SO 的不同部分,请随时迁移它,但我仍然希望得到答案。

干杯。

【问题讨论】:

  • 这与代码无关 = 它属于programmers.stackexchange.com

标签: oop language-agnostic architecture coding-style class-design


【解决方案1】:

您应该考虑SOLID Principleshere

关于责任分配申请GRASP Patterns

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    • “谁负责执行此操作?”
    • “这个依赖关系是合乎逻辑的并且是这个对象工作所必需的,还是只是由于代码组织不好而造成的虚假依赖?”
    • “这是高级功能还是低级功能?”
    • “我在重复这个吗?”
    • “我可以在不知道外部代码的情况下在内部更改此对象/层/子系统吗?”
    • “我可以在将来扩展它而不破坏或使过去无效吗?”
    • “我能否轻松测试和探测此功能以确保行为正确?”
    • “是否易于理解和使用?”
    • “我是否可以轻松地重新组合我已有的内容而无需接触以实施新行为?”
    • “此功能是否已隔离,以便我可以将其展示给外部世界,而无需我操作其他大部分代码?”

    【讨论】:

    • 很好的答案,谢谢。我知道这是有经验的,但我没有那么多经验,所以我试图了解这些概念。
    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多