代码之家  ›  专栏  ›  技术社区  ›  Patrick

保持模块的独立性,同时仍然相互使用

  •  3
  • Patrick  · 技术社区  · 14 年前

    我想在我的应用程序中添加一个新模块,它需要利用这些类类型,但是我不希望从我的新模块中引入对类类型的依赖关系。

    到目前为止,我有以下选择:

    • 不使其独立并引入对类类型的依赖,有可能在我的应用程序中创建更多的“意大利面条”依赖(这是我最不喜欢的解决方案)
    • 使用字符串作为标识方法,并强制新模块的用户在需要时将类类型转换为字符串,反之亦然。

    在对应用程序中的模块进行解耦时,您应该尝试走多远?

    • 只需引入一个接口,并让所有其他模块依赖于该接口?(如上所述)
    • 甚至通过使用其他标识(比如字符串或GUID)来进一步解耦它?

    3 回复  |  直到 14 年前
        1
  •  1
  •   djna    14 年前

    我不去想你的想法,只去看那些依赖性的想法。

    去耦合合理的去耦合。耦合意味着,如果一件事发生了变化,那么另一件事也必须发生变化。因此,您的新代码使用的是类类型,如果它的某些方面发生了变化,那么您肯定 必须

    1. 语义,类类型做什么。
    2. 实施,如何实施。

    在我看来,前两个是合理的耦合。但是实现的改变不需要新的代码来改变。所以代码到接口。我们试图保持接口固定,我们倾向于扩展它们而不是改变它们,尽可能保持它们的兼容性。有时,我们使用名称/值对来尝试使接口可扩展,然后遇到您提到的打字错误。这是灵活性和“类型安全”之间的权衡。

        2
  •  2
  •   Billy ONeal IS4    14 年前

    99%的时候,如果你的设计是基于反射的,那么你的设计就有重大问题。

    if (x is myclass)
    elseif (x is anotherclass)
    else
    

    是一个糟糕的设计,因为它忽略了多态性。如果你这么做,那么 x

    另外,考虑到C++已经有RTTI,我不明白为什么你会发明轮子。那是什么 typeof dynamic_cast 是给你的。

        3
  •  0
  •   Nick    14 年前

    这是一个哲学问题;它取决于模块的类型和权衡。我想我个人在不同的时候都做过,除了GUID到类型的映射,在我看来,GUID到类型的映射并不比string到类型的映射有任何优势,至少string是可读的。

    不管怎样,这是我的意见。