首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >N-Tier发布/订阅设计问题

N-Tier发布/订阅设计问题
EN

Stack Overflow用户
提问于 2010-07-08 03:28:23
回答 2查看 381关注 0票数 1

我刚刚开始学习如何编写一个好的软件系统的良好架构,并且我正在学习如何将高级组件分成多个层。在本例中,我尝试使用层,以便将每个层建模为一个黑盒。

在我的体系结构中有4层:表示层、应用服务层、业务逻辑层和域/持久层。就我的问题而言,我们实际上只需要关注演示和应用程序服务。

应用程序服务层将包含一个允许跟踪特定事件的服务。演示文稿将有几个视图,这些视图应该随着事件跟踪模型的更改而动态更新。从本质上讲,我似乎需要一种单向的更改传播机制。

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

我是用Java编写这个应用程序的,所以最明显的用法是Observable/Observable。但是,我不喜欢观察者接口的update方法强制您转换对象参数。我想通过为这个机制定义我自己的接口和类来解决这个问题。因此,问题是应用程序逻辑将依赖于来自表示层的接口,这是该体系结构的某种禁忌。这是不是意味着我应该首先尝试使用MVC建模,然后对模型进行分层?或者,使用应用程序服务层中已知的接口对每个视图进行建模是否更好。它看起来不是一个放它的地方,我被卡住了。另外,我使用View-Handler设计模式来处理多个视图。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-08 03:59:18

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2010-07-08 04:38:05

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

简短的回答:

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

长长的答案:

如果您正在使用Java语言,我建议您使用Head First Design Patterns,它将引导您以模式的方式进行思考。在你了解了设计模式之后,我想你现在已经在学习设计模式了,你可以看看Patterns of Enterprise Application Architecture了。你可以先跳过Head,但如果你对架构感兴趣,我强烈推荐这是一本非常好的书。

一旦您消化了Fowler这本书,或者至少对N-Tiered Enterprise Architecture有了基本的了解,您就应该可以顺利上路了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3198145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档