【问题标题】:N-Tier Publish/Subscriber Design ProblemN 层发布/订阅者设计问题
【发布时间】:2011-03-13 00:09:07
【问题描述】:

我只是在讨论如何为一个好的软件编写一个好的架构 系统,我正在学习如何将高级组件分成图层。 在这种情况下,我尝试使用层,以便将每个层建模为黑色 盒子。

我的架构中有 4 层:表示层、应用程序服务层、 业务逻辑和域/持久性。就我的问题而言, 我们真的只需要关注演示和应用服务。

应用程序服务层将包含一个允许跟踪的服务 某事件的。演示文稿将有几个观点,应该 随着事件跟踪模型的变化而动态更新。本质上, 看来我需要一种单向的变化传播机制。

由于我试图将这些层建模为层,因此我想限制通信 每个层的外观对象之间,必要时允许层 从低一层聚合一个对象,尽管只有接口知道。

我正在用 Java 编写这个应用程序,所以很明显要使用的是 可观察/观察者。但是,我不喜欢更新方法 观察者接口强制你转换对象参数。我想解决 这是通过为此机制定义我自己的接口和类来实现的。问题, 那么,应用程序逻辑是否将依赖于 Presentation 中的接口 层,对于这种架构是一定的禁忌。这是我应该尝试的迹象吗 最重要的是使用 MVC 建模并分层模型?或者这是一个更好的主意 使用应用服务层中已知的接口对每个视图进行建模。 这似乎是一个不好的地方,我被困住了。另外,我使用 View-Handler 设计模式来处理多个视图。

【问题讨论】:

    标签: java architecture n-tier-architecture publish-subscribe


    【解决方案1】:

    Observer/Observable 通常不是最好的方法,尤其是在 Java 中,你必须从 Observable 派生,从而浪费你的单一继承。正如您所讨论的,它还会导致耦合,这在跨层时很糟糕。

    我更倾向于研究纯 Event 模型,服务提供了一种注册 EventListener 的方法,并可能在发生更改时触发 PropertyChangeEvent。

    然后服务层可以通知其他服务,或者通知表示层——它不知道也不关心,只有表示通过注册为侦听器的方式与服务耦合。

    【讨论】:

    • 我同意 - Observer/Observable 类是在原始 Java 规范中添加的,当时和今天一样毫无价值。我希望他们会弃用并摆脱他们,因为他们所做的只是迷惑人们并引导他们走上错误的道路。
    • 这听起来是个不错的解决方案。但是,我发现很难理解服务层中的底层模型如何将信息传播到表示层。如果 Presentation 包含一个注册到模型的 Action Listener,当触发 PropertyChangeEvent 时,视图如何检索它需要的数据?
    • 我认为服务层会提供获取数据的方法供表示层使用,但无论如何PropertyChangeEvent 有getPropertyName()、getOldValue() 和getNewValue() 方法。触发事件的人应填写相关信息。您还可以基于 Actions 和 ActionListeners,或者派生您自己的自定义 Events 和 EventListeners,这取决于给定系统的(我不知道的)细节最有意义的事情。
    • 我最终得到了类似的东西。花了几天时间来消化,抱歉最后的回复。谢谢你。 :>
    【解决方案2】:

    在我看来,您的问题与其说是发布/订阅,不如说是如何让各层进行通信。

    简答:

    使用 MVC/MVP。查找有关它们的博客文章,下载源代码,并记住:如果您只有一把锤子,那么一切看起来都像钉子。意思是不要因为你有模式而应用它们,而是因为你需要它们而应用它们。

    长答案:

    如果您使用 Java,我建议您使用 Head First Design Patterns,这将使您了解模式思维方式。在你了解了设计模式之后,我认为你已经开始了,你可以看看Patterns of Enterprise Application Architecture。随意跳过 Head First,但如果你正在学习建筑,我强烈推荐这是一本非常好的书。

    一旦您消化了 Fowler 的书,或者至少对 N 层企业架构有了基本的了解,您就应该顺利上路了。

    【讨论】:

    • 你是对的。我的问题当然更多是关于层通信。我提出的解决方案是一种更改传播机制,考虑到视图必须随着模型的更改而更新,并且多个视图应该可以轻松访问此模型。发布/订阅者可能不是最好的方法。那么,话虽如此,您是否建议每次我遇到分层架构的这个问题时,我都会求助于 MVC?如果这是真的,图层似乎很弱——我敢肯定不是。
    • 继续,我的房间用完了。 :( 我读了一点 Head First Design Patterns 。没关系。我读过四人帮的书,Holub on Patterns 和 Patterns of Software Architecture,Volume I。我打算很快看看 Fowler 的书。这是很难区分何时使用某些模式,因为其中一些非常有效。有专门针对 N-Tiered 的书籍吗?很多时候这似乎是一条很好的路线(这可能是一个超级幼稚的说法。 )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多