在前端控制器中说到执行命令时,是用命令对象自己调用视图,如果系统的规模较小,可以如此。但这并不是最佳的选择,最好是尽可能地将命令和视图分离开来。
一、概念
应用控制器负责映射请求到命令,并映射命令到视图。这种分离意味着可以更加容易地改变视图(即模板)而不用改动核心代码。同时,也可以改变应用程序的流程而不需要修改核心部分的代码。通过将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。
四、总结
应该发现,要实现一个完整的应用控制器模式是相当困难的,需要做很多的工作,包括得到和应用元数据来描述命令与请求、命令与命令以及命令与视图之间的关系。因此,最好只在项目需要时才这样做。我当在命令类中添加条件语句来加载不同的视图或者调用不同命令时,如果觉得命令与显示的逻辑不太容易控制,才会相到使用应用控制器。
当然,正我之前所说,应用控制器的实现方式有很多种,而不仅限于上面介绍的那个方法。
相关推荐
### 系统架构师基础到企业应用架构 #### 一、引言 本文旨在深入探讨系统架构中的表现层设计及其重要性。系统架构是软件工程中的核心组成部分,它定义了软件系统的结构、行为以及属性。其中表现层作为用户与系统的...
MVC是一种常见的软件设计模式,它将应用分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理业务数据和信息,视图呈现给用户界面,而控制器则协调视图和模型之间的交互。这种架构...
7.2.1 模型—视图—控制器模式 7.2.2 模型—视图—展示器模式 7.2.3 PresentationModel模式 7.2.4 选择用户界面模式 7.3 表现层的设计 7.3.1 视图中要显示什么数据 7.3.2 处理用户操作 7.4 表现层的...
在企业级MVC架构中,控制器可能还会调用服务接口层来实现跨层交互。 4. **业务逻辑层(Business Logic Layer, BLL)** 业务逻辑层位于模型之上,它封装了特定于应用的业务规则和流程。BLL处理复杂的业务处理,比如...
- **Controller(控制器)**:负责View和Model之间的流程控制,具体任务包括: - 将用户界面操作映射到具体的Model处理; - 将Model处理结果及时反馈到用户界面。 - **MVC架构优势**: - 增强代码稳定性,通过...
域控制器在企业网络架构中扮演着至关重要的角色,它是一种服务器,负责管理网络中的身份验证、权限分配以及策略执行。在这个特定的案例中,我们将探讨国内一家知名企业的网络配置,以此为例来深入理解域控制器的运作...
书中包含了大量的实例,演示如何创建控制器、路由、模型和视图,以及如何进行单元测试和集成测试。 在数据访问层,本书重点讲解了Entity Framework,它是.NET中的主流ORM(对象关系映射)工具。通过Entity ...
MVC模式将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。Struts架构的主要组件包括ActionServlet、Action、ActionForm、JSP和Tiles等。 Struts架构的优点包括:松耦合、可重用、灵活...
在云平台应用架构对接中,我们关注的是如何将企业或组织的应用系统与云环境无缝集成,以充分利用云计算的弹性、可扩展性和高可用性。中国联通软件研究院的《云平台应用架构对接》课程深入探讨了这一主题,旨在帮助...
系统架构师在设计企业级应用时,需深入理解并熟练掌握表现层的架构与设计模式,以确保应用程序的用户界面(UI)不仅美观,而且高效、响应迅速、易于维护。表现层作为用户与系统之间的桥梁,承担着展示数据、接收用户...
《Microsoft .NET企业级应用架构设计》是一本深入探讨如何利用.NET框架构建高效、可扩展且易于维护的企业级应用程序的权威指南。这本书的核心内容涵盖了.NET技术在大型项目中的实际应用,旨在帮助开发者理解和掌握...
6. **Web应用程序架构**:涵盖了ASP.NET MVC和ASP.NET Core等技术,讨论了路由、控制器、视图以及模型-视图-控制器(MVC)模式,同时涉及响应式设计和跨平台开发。 7. **数据访问技术**:讲解了ADO.NET、Entity ...
1. **模型-视图-控制器** (Model-View-Controller, MVC):将应用程序分为模型、视图和控制器三个部分,使各部分职责清晰,便于维护和扩展。 2. **命令模式** (Command Pattern):将请求封装为一个对象,从而使你可用...
互联网企业网络架构优化是一项复杂而重要的工作,它涉及应用交付网络架构的设计、从传统应用交付过渡到云计算、以及通过案例分析来实现具体的技术落地。以下是与该主题相关的关键知识点: 1. 应用交付网络架构设计...
企业大数据架构及应用是当前信息技术领域的一个重要主题,它涵盖了数据采集、存储、处理、分析以及可视化等多个层面,旨在帮助企业从海量数据中提取价值,推动业务创新和决策优化。在这个主题下,我们可以深入探讨...
VDI(Virtual Desktop ...VDI虚拟桌面架构是企业信息化建设中不可或缺的一部分,其灵活性、安全性、集中化管理等方面的优势为企业带来了巨大的运营效益。随着云计算和虚拟化技术的不断进步,VDI将发挥更加重要的作用。
MVC设计模式(Model-View-Controller,模型-视图-控制器)是一种常用的软件设计思想,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。 - **模型(Model)**:负责存储和管理数据,以及...
MVC架构模式是一种广泛应用在软件开发中的模式,其目的是为了将软件的业务逻辑、数据和用户界面分离...因此,MVC架构模式与Java的结合,成为了企业发展的关键因素之一,帮助企业构建起更加稳定、高效和安全的软件系统。
科瑞特自动化DMC300A运动控制器是一款采用高性能“DSP+FPGA”架构的运动控制器,具有以下特点: 1. **大容量存储**:具备32M存储空间,支持768个程序、768个参数组,每个参数组包括4096个参数,理论上支持超过50万...
该架构利用嵌入式STT-MRAM芯片,通过将其应用于SSD控制器芯片架构设计中,不仅能够简化掉电异常流程,节省SSD盘内备电电容,而且可以实现硬盘容量的提升。根据文中所述,使用嵌入式STT-MRAM的SSD控制器架构能够支撑...