java - N 层发布/订阅者设计问题

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

我刚刚开始研究如何编写优秀软件的优秀架构 系统,我正在学习如何将高级组件分成层。 在这种情况下,我尝试使用层,以便将每个层建模为黑色 框。

我的架构中有 4 层:演示、应用程序服务、 业务逻辑和域/持久性。出于我的问题的目的, 我们实际上只需要关注表示和应用程序服务。

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

由于我尝试将这些层建模为层,因此我想限制通信 每个 Tier 的 Facade 对象之间,并在必要时允许一个 Tier 聚合来自较低一层的对象,尽管仅通过接口(interface)知道。

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

最佳答案

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

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

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

关于java - N 层发布/订阅者设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198145/

相关文章:

java - ASP.Net 中的 3 层数据库应用程序 Web 客户端和 Java 中的业务逻辑

Java 使用 println 方法打印继承的对象

java - 如何处理 HttpAsyncClient 异常

amazon-web-services - 如何避免单页应用程序中的 CORS 预检请求?

architecture - 如何使用动态数据启用页面索引?

c# - 我应该在哪一层声明枚举?

c# - n-tiers & ORM & 如何实现 ORM

Java : HTML Parsing

Java 如何获取当前时间的毫秒部分而不是 1970 年的毫秒部分

c# - 无法转换作为派生类的继承类字段