在前端控制器中说到执行命令时,是用命令对象自己调用视图,如果系统的规模较小,可以如此。但这并不是最佳的选择,最好是尽可能地将命令和视图分离开来。
一、概念
应用控制器负责映射请求到命令,并映射命令到视图。这种分离意味着可以更加容易地改变视图(即模板)而不用改动核心代码。同时,也可以改变应用程序的流程而不需要修改核心部分的代码。通过将Command分离出来,可以更加容易地把同一个Command用在系统中的不同地方。
二、为什么要使用应用控制器?
假设用户需要关注一个好友(Friend),并通知被关注者,即发送消息(Feeds),因此系统需要支持AddFriend和SendFeeds命令,我们可以直接使用请求参数(cmd=AddFriend)将命令映射到一个类。如果AddFriend执行成功,SendFeeds命令将被调用,然后SendFeeds加载一个视图,这种关系可以硬编码到类本身。这种处理方式随着系统中命令类的不断增加,麻烦也接踵而至。比如现在要让AddFriend使用特定的视图,并且想要修改AddFriend调用SendFeeds的逻辑,那么你应该将命令间的关系及命令与视频间的关系的硬编码全部修改。
应用控制器可以替你完成这个工作,把Command解放出来,让Command集中处理自己的工作,包括处理输入、调用应用程序和处理结果等。
三、实现应用控制器
其实实现的方法仁者见仁,智者见智,关键在于模式中参与者(应用控制器、命令和视图等)互相通信的方式,而不是实现的细节,下面简单介绍一种通过xml配置文件来实现的方式。
第一步:配置文件
<woo-options> <dsn>sqlite://./data/woo.db</dsn> <control> <view>main</view> <view status="CMD_OK">main</view> <view status="CMD_ERROR">error</view> <command name="ListFriend"> <view>listvenues</view> </command> <command name="QuickAddFriend"> <classalias name="AddFriend" /> <view>quickadd</view> </command> <command name="AddFriend"> <view>addfriend</view> <status value="CMD_OK"> //如果操作成功,则前进到下一步SeedFeeds <forward>SendFeeds</forward> </status> </command> <command name="SendFeeds"> <view>seedfeeds</view> <status value="CMD_OK"> <forward>ListFriend</forward> </status> </command> </control> </woo-options>
第二步:解析文件
就是解析上面的xml,此步可以放在前端控制器中的ApplicationHelper中进行。
第三步:存储配置数据
上一步解析后的数据利用注册表进行存储
第四步:根据配置数据,完成命令的迭代
通过前端控制器处理请求,根据请求参数查找第三步存储配置数据,获取Command,根据status,选择结束还是forward,结束则获取view,forward则进行下一步Command。
四、总结
应该发现,要实现一个完整的应用控制器模式是相当困难的,需要做很多的工作,包括得到和应用元数据来描述命令与请求、命令与命令以及命令与视图之间的关系。因此,最好只在项目需要时才这样做。我当在命令类中添加条件语句来加载不同的视图或者调用不同命令时,如果觉得命令与显示的逻辑不太容易控制,才会相到使用应用控制器。
当然,正我之前所说,应用控制器的实现方式有很多种,而不仅限于上面介绍的那个方法。
相关推荐
7.2.1 模型—视图—控制器模式 7.2.2 模型—视图—展示器模式 7.2.3 PresentationModel模式 7.2.4 选择用户界面模式 7.3 表现层的设计 7.3.1 视图中要显示什么数据 7.3.2 处理用户操作 7.4 表现层的...
7.2.1 模型—视图—控制器模式 7.2.2 模型—视图—展示器模式 7.2.3 PresentationModel模式 7.2.4 选择用户界面模式 7.3 表现层的设计 7.3.1 视图中要显示什么数据 7.3.2 处理用户操作 7.4 ...
(二)什么是软件架构风格,面向对象和控制环路两种架构各自风格的特点 (三)主程序-子程序 和 管道-过滤器 这两种架构风格的特点 (四)面向对象和基于规则 四、信息系统安全性 (一)信息系统面临的安全威胁 (三...
2.4.1 配置核心控制器(FacesServlet) 65 2.4.2 JSF配置文件结构 68 2.5 托管Bean和表达式语言 69 2.5.1 托管Bean的属性和表达式语言 69 2.5.2 托管Bean的方法 78 2.5.3 托管Bean的分类 80 2.5.4 初始化托管Bean的...
三层架构设计模式(MVC): 我们将详细介绍MVC模式的概念,包括模型(Model)、视图(View)、控制器(Controller)之间的关系。您将了解如何将业务逻辑、用户界面和数据分离,以便更好地管理和维护您的应用程序。 ...
uniq是一个Python API客户端库,用于Cisco的应用程序策略基础架构控制器企业模块(APIC-EM)北向API。描述APIC-EM北向接口是您唯一需要以编程方式控制网络的API。 该API功能丰富,可为您提供对网络元素,接口和主机...
- 易于扩展:结构清晰,方便根据实际需求对控制器(Controller)、服务(Service)以及自定义模型(Model)进行扩展。 使用此脚手架,开发者可以大幅提高企业级项目的开发效率,实现快速迭代与部署。
企业级通用开发平台,前后端分离架构,单工程,多模块,部署形态为单体应用。 前端基于vue3.2.47,element-plus 2.1.0,前端框架vue-element-plus-admin深度整合改造。后端SSM+MybatisPlus,使用SpringBoot 2.3.0。 ...
分词器 no-sql库 mongodb hadoop 业务拆分 web service restful 分布式服务 大型网站架构演化的价值观 核心价值:随网站所需灵活应对 驱动力量:网站的业务发展 网站架构设计误区 ...
它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库...
mySAP 商务套件 Powered by NetWeaver架构 & 集成 ...提供使用必要的网络元素(如网络中心,网桥,路由器,交换器,网关等)的不同的IT应用软件之间的IP进入 提供电话网络和IT网络与计费网关之间的连接。
PMC-Sierra发表新加入Tachyon控制器家族系列的PM8000 Tachyon SPC 8x6G,提供了第一代SAS 2.0企业级的阶层式储存架构。此项6Gbit/s SAS/SATA控制器是符合SAS 2.0的装置,可让OEM业者用以供应企业级SAS/SATA磁盘阵列...
它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库...
#资源达人分享计划#
它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库...
它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库...
Cortex-M3是首款基于ARMv7-M架构的处理器,是专门为了在微控制器,汽车车身系统,工业控制系统和无线网络等对功耗和成本敏感的嵌入式应用领域实现高系统性能而设计的,它大大简化了可编程的复杂性,使ARM架构成为...
23、下面哪些是核心组件的示例:域控制器/邮件路由器/远程访问服务器/数据库服务器 24、八条MSF基本原则中的哪几条与团队模型有关?拥有共同的远景/关注业务价值 /灵活敏捷,主动应变 /向团队成员授权/鼓励开放式...
这里,我将简要地介绍下 Struts 架构与模型-视图-控制器(MVC),如果您以前没碰到过,那么您应该在后面先看下 参考资料 部分来获取更多信息。 MVC 模式:分离开发角色 MVC 设计模式很清楚的划定了程序员与...
4、如何摆脱传统控制器厂家的制约,保障生产者的Know-how知识产权得以保护。另一方面,针对生产现场的智能化改造,1、如何打通信息孤岛,实现不同厂家专有系统之间的互联、互通、互操作;2、如何将智能融入到工业...