需求一:php
boss初期要求,咱们要设计一个用户管理系统,我须要他们的基本信息。
数据库
我开始写最简单的用户模型(信息模型和操做模型)。浏览器
<?php //操做模型 面向操做 interface IMemberAction{ function get($params);//获取用户 之后不知道会用什么来获取 function add();//新增用户 function remove();//删除用户 function listing();//用户列表 function remove($params); } //信息模型 面向数据库 interface IMemberModel{ function insert(); function delete(); function update(); function select(); //这里是最基本的 固然还会有left join等 }
接着在操做模型的基础上创建Service层 在信息模型上创建Dao层 这两层是交互的spa
class MemberAction implemetns IMemberAction{ public function add(){ new MemberDao.insert(); } public function remove(){ new MemberDao.delete(); } } class MemberDao implements IMemberModel{ public function insert(){ new Db.insert(); } }
//以后是浏览器与对接的控制器(调用service和视图,传递参数但不涉及逻辑处理) 权限控制在这里设计
class MemberController{ public function add(){ new MemberService.add($_POST['params']); include 'temp.tpl'; } }
好了,boss的需求咱们已经完成了,但事情还没完,过几周后,code
需求二:对象
boss说,我须要他们分等级,分部门,主管能够管理下面的人(删除、增长,考核业绩(业绩表))。rem
分析:这个时候的对象是多人了,是用户为主体。get
这个时候改变的第一个要素就是数据库结构,数据库结构上面我要变了,增长了部门,和等级(确定要新增表了)。权限控制
问题产生了。
一、添加用户的时候,要新增部门,并且是多表。
二、业绩也是多表。
这个时候千万别去改动原来的模型。这里是面向对象的组合型
新增部门数据模型
新增业绩数据模型
新增部门操做模型
新增业绩操做模型
原有的用户数据模型
原有的用户操做模型
接下来是service层。分平行2层
用户与部门service层。
用户与业绩service层。
最后设置视图和控制层。
需求三:
没过几天boss又有需求,想要知道部门的业绩及统计考核。
这个时候你只须要新建一个控制层和视图层,调用部门service和业绩考核service便可。
总结:
一开始的分层,对之后的需求是很是大的帮助的。
何时分层。
一、传递参数和视图分层
二、面向数据库仍是面向操做分层
三、表与表之间用