写点什么

比较 PureMVC 和 Cairngorm 的 GUI 架构

  • 2008 年 7 月 04 日
  • 本文字数:1228 字

    阅读完需:约 4 分钟

富有经验的 Java 开发者 Per Olesen 在 Tech Per 上发了一篇博客文章,比较两个最流行的Flex 框架, PureMVC Cairngorm ,并且着重比较了可用性和它们对 GUI 架构模式的应用。

在开发中以设计模式为指导已经是 Java 开发者的基本技术。在 Flex 和 ActionScript 开发者当中,设计模式的实践要么是从 Java 开发经验中来的,要么就是由一些 ActionScript/Flex 框架带来的。Olesen 描述了这个过程:

为了帮助架构这类应用,发展出了一些 GUI 架构的模式。其中一些比较著名的模式, Martin Fowler 已经作了很好的描述,比如 a href=“ http://martinfowler.com/eaaDev/PresentationModel.html ”>Presentation Model(呈现模型)和 Supervising Presenter 。它们不是像 MVC 一样完整的用户界面架构,而是一些比较小的架构指引,涉及的是应用程序的逻辑如何与视图框架的 API 联系起来。

他解释说:

PureMVC 有一个名为 Mediator 的构造,顾名思义,它就是 Mediator 模式的实现,充当视图 API 和程序其余部分的 API 之间的中介。这是 PureMVC 实现 MVC 架构视图部分的关键构造。引入它是为了减少应用和视图之间的依赖,从而降低整个系统的耦合程度。

Olesen 还指出 PureMVC 有一份关于实现之惯例和最佳实践的文档,文档中还以实际的例子 LoginPanel 进行解说。在例子里可以看出,只有 mediator 了解视图,视图对 mediator 一无所知。

在分析了 PureMVC 的文档提供的源代码之后,Olesen 相信这个其实就是 Supervising Presenter 模式或者 Passive View(被动视图)模式。两种模式都把行为从视图中抽出来,将之放入与视图耦合的一个表现类。在两个模式中,都是“表现者知道视图,视图不知道表现者”。因此两种模式的区别在于如何抽取逻辑。PureMVC 的 mediator 与 Supervising Presenter 最为接近。

谈到 Cairngorm 框架,Olesen 的观察是:

Cairngorm 没有 mediator、supervising presenter, 或者 passive view 的概念。实际上批评它的人很多,因为它鼓吹的方案是将视图组件的状态直接绑定到模型。但更糟的问题是模型只是通过单体模式表达的一个全局状态。

在 Cairngorm 文档和例子(无论是简单的联系人管理程序还是比较复杂的 Cairngorm Store)中,这个问题更加突出。视图中有许多逻辑,而且是按照 Autonomous View(自治视图)模式来安排的。什么是 Autonomous View 模式呢?Martin Fowler 的回答是:将一个窗口所有的表现状态和行为都放在一个类里。

Olesen 觉得这种模式等于是没有模式。他觉得采用 Cairngorm 的应用程序里的自治视图是在鼓励直接把数据绑定到一个全局模型的实例上,非常不利于分离视图和模型两者的关注点。

最后,Olesen 并非简单地认为这个框架比那个好,他的结论是:

无论是哪个框架,UI 模式都只是框架的一部分,虽然是重要的一部分。有人会觉得 PureMVC 自带的东西更多一些,mediator 是框架中内建的概念。中介者及以通知方式进出中介者的通信,都很好地整合进了 PureMVC 框架。

查看英文原文: Comparing GUI Patterns in PureMVC and Cairngorm

2008 年 7 月 04 日 01:075081
用户头像

发布了 225 篇内容, 共 52.4 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

基于Flink CDC打通数据实时入湖

五分钟学大数据

flink 1月月更

RavenDB起步--第一个 RavenDB 程序

喵叔

事件驱动架构在 vivo 内容平台的实践

vivo互联网技术

微服务 云原生 事件驱动架构

20000字详解大厂实时数仓建设 | 社区征文

五分钟学大数据

数据仓库 实时数仓 1月月更 新春征文

鸿蒙轻内核M核源码分析:LibC实现之Musl LibC

华为云开发者社区

鸿蒙 内存分配 LibC Musl LibC Musl

中科柏诚:积极践行为中小企业服务宗旨,同乡村振兴有效衔接

联营汇聚

第四节:SpringBoot中web模版数据渲染展示

入门小站

springboot

RavenDB起步--安装以及示例数据库

喵叔

ReactNative进阶(三十一): IoC 框架 InversifyJS 解读

No Silver Bullet

​React Native 1月月更 InversifyJS

MySQL 如何解决幻读(MVCC原理分析)

Ayue、

MySQL InnoDB 1月月更

TDSQL-C PostgreSQL版的高可用特性

腾讯云数据库

tdsql 国产数据库

为数据库性能调优插上 AI 的翅膀 | 调优测试框架 Matrix 团队访谈

PingCAP

智联生活行业加速器热门FAQ:物联网企业该如何与华为云合作?

华为云开发者社区

物联网 华为云 智联生活 智联生活行业加速器 云市场

TDSQL PostgreSQL执行计划详解

腾讯云数据库

tdsql 国产数据库

看过来!腾讯文档上架优麒麟软件商店啦

优麒麟

Linux 开源 腾讯 操作系统 麒麟操作系统

TDSQL-A技术架构演进及创新实践

腾讯云数据库

tdsql 国产数据库

Redis:我是如何与客户端进行通信的

华为云开发者社区

redis 通信 协议 指令 客户端

1月月更|推荐学java——Spring事务

逆锋起笔

spring事务管理 spring ioc java 编程 Spring Java Spring事务

RavenDB起步--使用 RavenDB Studio

喵叔

为什么ConcurrentHashMap是线程安全的?

王磊

华青融天加入,龙蜥社区再添科技风险监测领域新伙伴

OpenAnolis小助手

Linux 开源 合作伙伴

分享四款H5怀旧小游戏魔塔+伏魔记+三国霸业+寻仙纪

echeverra

前端 游戏

比较PureMVC和Cairngorm的GUI架构_Java_Moxie Zhang_InfoQ精选文章