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

部件松动耦合

  •  2
  • David  · 技术社区  · 15 年前

    我创建了一个类库(程序集),提供消息、电子邮件和短信息。这个类库定义了一个接口IMessenger,这两个类emailmessage和smsmsmessage都实现了这个接口。

    我看到这是一个通用库,它将是我的基础结构层的一部分,并且可以在任何开发中使用。

    现在,在我的应用程序层中,我有一个类需要使用消息传递组件,我显然想使用我创建的消息传递库。此外,我将使用一个IOC容器(spring.net)来允许我注入我的实现,即电子邮件或短信息。

    因此,我想在我的应用层类中针对一个接口编程,那么我需要从我的应用层类中引用我的消息类库吗?

    这是否将应用程序层类与消息类库紧密耦合?

    我应该在单独的库中定义接口-IMessenger吗?

    还是我应该做点别的?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Brad Nabholz    15 年前

    这完全取决于你未来对Imessenger的计划。我个人并不认为在同一个程序集中拥有接口和几个示例实现是一件坏事。如果有人想要提供一个新的IMessenger实现,他们将不得不在另一个程序集中进行,并且在引入您的程序集的过程中,他们将收到电子邮件、smsmsmmessage等。对于轻量级程序集,我认为这不是什么大问题,因为它节省了您将“接口”和“实现”同时引用为每次你想用的时候都会用到。

    如果您的实现类引用了与您的组织相关的其他代码或任何您不希望公开的代码,那么将imessenger分离到它自己的程序集中并根据需要分发它会更有意义。

        2
  •  1
  •   Henri    15 年前

    引用(从而耦合)应用程序层类到消息库没有任何错误。只要您的消息库是独立的,并且不知道它的用户,就可以了。

    此外,不要仅仅因为体系结构的事实而过度设计。它应该有一个目标,而且收益应该大于成本。

        3
  •  0
  •   bloparod    15 年前

    我对你的问题的回答:

    • “因此,我想在应用程序层类中对接口进行编程,然后需要从应用程序层类引用消息类库吗?”不

    • “这是否将应用程序层类与消息类库紧密耦合?”对

    • “我应该在单独的库中定义接口-IMessenger吗?”对

    如果您使用的是IOC容器,请注入依赖项,不要将您的应用程序与基础结构实现结合起来。

    我的实现是将IMessenger接口放在应用程序层中,以便允许我的应用程序对象与接口进行对话,不管它的实现是什么。我将在一个单独的程序集中发送普通电子邮件和短信息,它们实现了Imessenger。显然,注入是由IOC容器执行的。

    应用层不应该知道基础结构层。

    这是一个很好的页面,可以看到这种设计: Hexagonal Architecture .