4、GRASP原则四:控制器 Controller
   What first object beyond the UI layer receives and co-ordinates (controls) a system operation?

    在领域层,由谁负责首先接收并协调来自UI层的系统操作?
4.1 Mini Exercise 4

   For Monopoly game, Which object starts the game?
   Understanding the Problem

     SSD — boundary between the User and SUD (system under development)

     UI layer “catches” the request

     The request is a system operation — public interface

     Model-View Separation principle says UI must not contain business logic

     Problem: UI应该把捕捉到的系统操作,发给领域层的哪个对象呢?
4.2 GRASP rule4: Controller

   Name: Controller 控制器

   Problem:

     What first object beyond the UI layer receives and co-ordinates (controls) a system operation

   Solution:

     Assign the responsibility to a class representing one of the following choices:

     1. Facade(外观) Controller:

       represents the overall system, a root object, a device that the object is running within, or a major sub-system

     2. Use Case or Session Controller(用例控制器、会话控制器):

       represents a use case scenario within which the system event occurs
4.5 Controller — Observations 观察

   委托模式 Delegation pattern

   外部输入事件可以来自参与者(人)或者(其他系统)

   Facade — 相当于领域层对外部世界的“脸”

     Ex: Register

   Handler —处理系统某个明确的功能集,比如相关的一组系统事件

     Ex: ProcessSale
4.5 Controller — Facade

   外观控制器 Facade

     为子系统中的一组接口提供一个一致的界面

      Provide a consistent interface for a set of interfaces in subsystem“cover” over the other layers of the application

     Abstraction of an overall physical unit

       — Register, PizzaShop

     The entire software system

       — POSSystem

     Abstraction of some other overall system or sub-system concept

       — MonopolyGame

   适用于

     相对较小的系统 relatively small systems

     有限数量的系统操作 and/or system with limited number of system operations

     在消息处理系统中,不能转发消息到可选的控制器时

      in message handling system when can’t direct messages to alternative controllers

       — Internet application servers
4.5 Controller -- Session

   会话控制器

     一种纯虚构出来的概念 Pure Fabrication,即领域模型中没有的概念

     如, ProcessSaleHandler is not a domain concept in Domain Model

   会话控制器的应用场合

     当采用外观控制器会导致高耦合、低内聚时 When assigning to facade may lead to high coupling or low cohesion (“Bloat”)

     很多系统事件跨越多个不同的处理过程 Many system operations across different processes

     概念上容易理解和构建 Conceptually easier to understand and build

       一个会话控制器负责一类系统事件

   会话控制器的命名习惯 Session Controllers Naming conventions

       <UseCaseName> Handler or

       <UseCaseName> CoOrdinator or

       <UseCaseName>Session

     Use same controller class for all system operations in the use case scenario

     Session is a type of conversation between the actor and the SUD 新系统
4.7 Discuss: Controller — Benefits

   控制器模式的优点

     容易适应UI层的变化 Allows for easy change of UI and/or alternative UI

     领域层代码易于重用(因为UI层一般与应用关系密切)Allows for reuse of domain layer code (UI is usually application specific)

     有助于保证应用所需要的操作顺序 Helps ensure sequence of operation which may differ from UI input

     可以对系统的状态进行推理(UI层不保存系统状态)Can reason about system state — UI does not preserve state
4.8 Bloated(臃肿的) Controllers

   臃肿控制器的问题

     当一个外观控制器处理了大部分系统事件时 When have a facade controller handling all of many system events

     当一个控制器做了太多的事情,而不是委托给其他的对象去处理

      When the controller performs many of the system operations instead of delegating

     当控制器掌握了太多的系统信息 When the controller has many attributes (much information) about the system

       which should be distributed to or duplicates from elsewhere

     导致:低内聚 Low cohesion — 做事不专注,做了太多的事

   臃肿控制器的解决方法

     增加更多的控制器 Add more controllers

     采用会话控制器替换外观控制器 “session controller” instead of facade

     控制器委托任务给别的对象,而不是自己做 Design the controller so that it delegates operations to other objects

     高内聚的理念 High Cohesion is itself a GRASP principle

7.4 GRASP原则四:控制器 Controller的更多相关文章

  1. 运用GRASP原则来做uml交互类图-------pos机实例

    重要的几个GRASP原则:1.控制器模式   2.创建者模式 (原则)3.信息专家模式(原则) 4. 高内聚 低耦合   这里所说的模式并不是java中针对具体的事件的设计模式 主成功场景的几个操作: ...

  2. 7.6 GRASP原则六: 多态 Polymorphism

    GRASP原则六: 多态 Polymorphism  How to handle alternative behaviors based on type 如何处理依据类型不同而有 不同行为的一类需求 ...

  3. 7.1 通用的职责分配软件原则 GRASP原则一: 创建者 Creator

    1.GRASP原则一: 创建者 Creator  Who should be responsible for creating a new instance of some class 由谁来负责创 ...

  4. C#-MVC基础-模型(Model)、视图(View)和控制器(Controller)

    搜狗百科:http://baike.sogou.com/v25227.htm?fromTitle=MVC MVC全名是Model View Controller,是软件工程中的一种软件架构模式,把软件 ...

  5. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  6. ASP.NET MVC5基础-控制器(Controller)详解

    在上文ASP.NET MVC5基础 – MVC文件架构中我们简单了解了下控制器Controller的作用,本文我将详细介绍控制器Controller的使用方法. Controller的运行过程 上文我 ...

  7. Spring MVC(四)--控制器接受pojo参数

    以pojo的方式传递参数适用于参数较多的情况,或者是传递对象的这种情况,比如要创建一个用户,用户有十多个属性,此时就可以通过用户的pojo对象来传参数,需要注意的是前端各字段的名称和pojo对应的属性 ...

  8. spring自动扫描、DispatcherServlet初始化流程、spring控制器Controller 过程剖析

    spring自动扫描1.自动扫描解析器ComponentScanBeanDefinitionParser,从doScan开始扫描解析指定包路径下的类注解信息并注册到工厂容器中. 2.进入后findCa ...

  9. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

随机推荐

  1. 作业二 分布式版本控制系统Git的安装与使用

    第一步:Git bash配置 修改用户名和邮箱地址: $ git config --global user.name "zzj" $ git config --global use ...

  2. 为虚拟机配置NAT网络

    一.打开网络适配器 1.按图中所示进行配置 2.记得把网和VM8关联一下 3.点击网络设置 4.点击右下角小齿轮来配置ip 5.在IPv4下选择手动 6. 7. 这个就是Linux的NAT配置

  3. Ubuntu上Qt之简单图片浏览器

     >>主要功能: (1)图片切换浏览,上一张/下一张. (2)图片放大.缩小.包括两种机制:鼠标滚轮和按钮放大/缩小. (3)图片自动循环播放,间隔2s.点击播放后,其他操作均无效,直至点 ...

  4. 【UML】-NO.44.EBook.5.UML.1.004-【UML 大战需求分析】- 顺序图(Sequence Diagram)

    1.0.0 Summary Tittle:[UML]-NO.44.EBook.1.UML.1.004-[UML 大战需求分析]- 顺序图(Sequence Diagram) Style:DesignP ...

  5. Django进阶之中间件

    中间件简介 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在djang ...

  6. ASP.NET Core 之 Identity

    Claims:声明(证件单元)Identity:身份Principal:当事人Authentication :认证Authorization:授权 http://www.cnblogs.com/sav ...

  7. Eureka 参数调优

    常见问题 为什么服务下线了,Eureka Server 接口返回的信息还会存在. 为什么服务上线了,Eureka Client 不能及时获取到. 为什么有时候会出现如下提示: EMERGENCY! E ...

  8. RNA-seq基本流程

    https://www.2cto.com/net/201801/714420.html

  9. SQL Server 2012安装时报错,错误 0x80070422怎么解决?解决方法。

    步骤一: Win+R打开运行窗口,输入services.msc 打开服务窗口 步骤二: 找到并启用"Windows Update" 成功进入下一步!

  10. 使用现有的appid和appsecret无法打开二维码

    在微信公众平台申请的现有的appid和appsecret无法打开二维码 因为已有的appid和appsecret是微信公众平台认证的,没有在开放平台认证,所以会显示 "Scope参数错误或者 ...