• 1. 解读优秀框架之YII 分层设计苏骞 QQ:635927818 Email:aoxue.1988.su.qian@163.comPHP框架说明:http://www.phpframeworks.com/ Yii国际主站:http://www.yiiframework.org Yii中国主站:http://www.yiichina.org/
  • 2. 一、分层设计 A、在项目开发过程中中遇到过以下问题吗? 1、面对需求的变动,我们代码的整体架构也不得不跟着变动 ,就是传说中的牵一发而动全身? 2、项目开发过程中,我们更多的集力花在内耗上 ? 3、在项目开发的开始,我们信心满满,中途我们动摇了?我们开始抱怨,开始愤怒。。。 4、一样的代码,在整个项目中全部都是,修个其中一处代码,必须同步修改其它很多处代码,有时候还有莫名其妙的BUG? ……
  • 3. B、面对这些问题,我们是继续抱怨,还是马上解决呢? 伴随着问题的产生,解决问题的方法也会开始被人们探索。 开发者为了解决项目维护难、扩展难、沟通受阻、开发效率低的问题,便开始不断的探索、研究、总结,便产生了分层这门学说
  • 4. C、软件架构的演变
  • 5. D、我们来看看OSI分层(网络七层)和TCP/IP四层 物理层:定义物理设备标准,如网线的接口类型、光纤的接口类型。它的主要作用是传输比特流 数据链路层:将从物理层接收的数据进行MAC地址进行封装与解封装。设备是交换机,数据通过交换机来传输。 网络层:从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。设备是路由器,常把这一层的数据叫做数据包。 传输层:定义传输数据的协议和端口号,如:TCP,UDP。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常把这一层数据叫做段。 会话层:通过传输层建立数据传输的通路。主要在你的系统之间发起会话或或者接受会话请求 表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西如图片、声音等)。 应用层 :终端的应用,如FTP,WEB,QQ)。
  • 6. 2、OSI七层与TCP/IP四层对照表
  • 7. 3、TCP/IP模型各个层次的功能和协议
  • 8. D、网络分层的优势 1、服务、接口和协议这三个层次明确、职责分离 2、上层只须了解下层的接口,不需了解内部的具体实现,下层为上层提供服务。每层只与相邻层交互和通信,与其它层没有业务交集,职责单一、独立性强、层内内聚度高,层与层耦合度低,便于开发,减少沟通。 4、降低问题的复杂度,网络发生故障,可迅速定位故障所处层次,便于查找和纠错,可维护性好 5、各层定义标准接口,使具备对等层的不同网络设备实现互操作,各层之间则相对独立,一种高层协议可放在多种低层协议上运行,可伸缩性好 6、网络技术革新,只须对部分层进行技术升级,不需全部更新换代。可扩展性强.
  • 9. E、软件界的三层架构 UIBLLDAL视图业务逻辑数据访问
  • 10. 1、概念  ◆数据访问层 DAL :操作对象是数据库与数据。负责对数据的处理与加工  ◆业务逻辑层 BLL :业务逻辑层承上启下,对上DAL提供的数据进行逻辑处理,实现业务目标和具有商业价值的东西。同时为视图层提供统一的接口  ◆表示层 Web :主要人机交互,接收或响应用户请求,显示处业务逻辑组织和加工的数据或者记录用户信息与行为视图层业务逻辑层数据访问层数据访问对象RDBMSNo Sql业务规则业务逻辑界面、布局与引擎解析实体层
  • 11. 2、原则 1.每一层对外提供的接口是稳定的,层内职责是明确单一的 2. 上层依赖下层的,下层仅仅为相邻上层提供标准接口与服务。 3.上层调用下层api,下层实现细节与需求的变动不会影响到上层的结构。
  • 12. 3、优势1.可伸缩性:可以把每一层灵活部署在不同服务器上,实现分布式或者集群。 2.可维护性:如果需求变动,只要相应调整某一层的实现即可。 3.可管理性:分工明确,跟踪方便 4.可扩展性:增加功能只需要在相应层上调整即可。 5.可重用性:业务逻辑模块则可供系统的多个模块公共。
  • 13. F、三层架构的变体—三层模式 1、MVC MVC(Model-View-Controller,模型-视图-控制器模式)是软件工程中的一种软件架构模式,HTTP请求首先到controller层,同Controller层进行调度。而Model层与View层实际上是通信的,并且有相应的UI逻辑
  • 14. 2、MVP MVP(Model-View-Presenter,模型-视图-表示器模式)也是软件工程中的一种软件架构模式,它的核心是减少View与Model层通信,完全解耦Model层与View层的关联,HTTP请求首先到View层,View把请求传递给Presenter,Presenter调度Model层,而Presenter通过视图接口实现View与Model的交互
  • 15. 3、MVP优劣 优势 1、模型与视图完全分离,我们可以修改视图而不影响模型 2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部 3、我们可以将一个Presener用于多个视图,而不需要改变3.4、Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。 5、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试) 劣势 1、视图与表示器交互过于频繁 2、表示器承担职责过多,可能导致这层业务逻辑过于臃肿
  • 16. G、三层架构与三层模式的关系 1、三层架构属概念层次,是软件分层设计的一种理论,三层模式是开发者根据项目经验总结而来,是三层架构的表现方式。 2、三层模式(MVC、MVP)是三层架构的变体
  • 17. 二、Yii中的MVC A、三层概要
  • 18. B、业务逻辑层(Model) 1、Yii中Model层做了那些事 1.1 实现了ORM 即对象-关系映射(Object/Relation Mapping,简称ORM) 1.2 封装了Entrity Layer 1.3 封装了Dal 1.4 验证 1.5 Form Model 与 DB Model的绑定关系 1.6 业务逻辑(部分或整体)
  • 19. 2、模型分类 Yii模型是 CModel 或其子类的实例。模型用于保持数据以及与其相关的业务逻辑。Yii实现两种类型的模型:表单模型和 Active Record。 表单模型:是 CFormModel 的子类。表单模型用于从用户表单获取的数据、进行验证。 ActiveRecord:活动记录是ORM的一种实现方式,主要用于对应关系型数据库里的数据与关系。Yii中的AR类的实现必须继承于CActiveRecord.表对应类,对象对应行,列对应属性。
  • 20. 2.1 Form Model 验证规则 特性 特性标签
  • 21. HTML表单 1、原生HTML表单 2、CHtml生成表单 3、CForm使用配置文件生成表单
  • 22. (本页无文本内容)
  • 23. 2.2 Active Record 活动记录是数据源架构模式的一种,是面向数据库的。 对象关系映射(ORM)的一种实现方式,在Yii中组织领域逻辑采用Active Record,简称AR.Data Source SchemaARRow Data GatewayData MapperTable Data Gateway数据源架构模式
  • 24. 2.2.1 AR常用接口说明 查询 findAll()查询出所有结果集; find()查询出单条结果集; findAllAttributes();按属性查照所有结果集 findAttributes();按属性查照单条结果集 findAllBySql();按原始Sql查照所有结果集 findBySql();按原始Sql查照所有结果集 findAllByPk();按Primary key查照所有结果集 findByPk();按Primary key查照所有结果集 新增 add(); save(); 删除 delete(); deleteAll(); deleteAllByAttributes(); dleteByPk();
  • 25. 更新 update(); updateAll(); updateByPk(); updateCounters(); 统计 count(); countByAttriubes(); countBySql(); 其它 getDbConnection(); getDbCretirea(); getDbCommandBuilder(); getErrors(); getError(); rules(); relations(); behaviors(); bindParams();
  • 26. 2.2.2 使用说明 新增或修改 查询
  • 27. 删除 命名范围
  • 28. 延迟加载与渴求式加载 延迟加载:获取一个 AR 实例中的关联属性,此属性以前没有被访问过,则一个关联查询将其初始化,它将两个表关联并使用当前 AR 实例的主键过滤 渴求式加载:获取主 AR 实例的同时获取关联的 AR 实例
  • 29. 关联查询 BELONGS_TO: 如果表 A 和 B 之间的关系是一对多,则 表 B 属于 表 A HAS_MANY: 如果表 A 和 B 之间的关系是一对多,则 A 有多个 HAS_ONE: 这是 HAS_MANY 的一个特例,A 最多有一个 B MANY_MANY: 对应于数据库中的 多对多 关系。 多数 DBMS 不直接支持 多对多 关系,有一个关联表将 多对多 关系分割为 一对多 关系在 AR 术语中,可以解释 MANY_MANY 为 BELONGS_TO 和 HAS_MANY 的组合.如,Post 属于多个(belongs to many) Category ,Category 有多个(has many) Post.
  • 30. C、视图层 1、名词与概念解释 布局:是一种用来修饰视图,本身也是视图文件,是描述网页的架构与骨骼,是视图的通用部分. 视图:是指实现系统与用户交互的具体界面,捕获用户的行为与界面展示。 渲染:在控制器中,对视图进行一定的处理与过滤,并将通过加工处理的干净数据传递给视图进行展示。 视图引挚:用于管理和解析视图用的,并提供视图层的标签、缓存、编译机制。 小物间:是具有一定功能性和富有逻辑的视图
  • 31. 2、代码片断 2.1 获取视图变量 控制器属性式:视图中$this指针指向控制器的属性,$this->property 渲染推送式:$this->render('edit', array( 'var1'=>$value1)); 2.2 布局 改变控制器的$layout公有属性,$this->layout=“application.blog.main” 2.3 渲染 渲染布局视图:$this->reader(‘视图名称’,’视图参数’); 演染非布局视图:$this->renderPartial(‘视图名称’,’视图参数’); 2.4 小物件 $this->widget('path.to.WidgetClass');
  • 32. D、控制器 控制器:是CController的实例,对View与Model进行调度 基于控制器的动作:是用户具体的行为,是CController子类对象的 一个方法,这方法由CInlineAction维护 基于类的动作:通用Action动作置于这个地方,一般继承CAction,也 可以组织模块化操作。 基于视图的动作:是视图专署动作,由CViewAction维护 动作参数绑定:$_GET的值自动绑定的动作的参数里面 function actionCreate($category,$language='en'){ $category=(int)$category; }
  • 33. 思考 1、 MVC与MVP的组织方式的优劣,什么场景下使用MVC,什么场景下使用MVP? 2、什么时候使用Module(模块化),什么时候使用CAction?
  • 34. Q&AQ&AThanks!