分层模式开发+MVC模式开发--韩顺平雇员数据库管理

1、分层模式

  在使用分层设计模式编写代码之前,我们更多的是采用面向过程然后眉毛胡子一把抓,在一两个程序代码里写完所有的功能,这样只适合于小型个人项目。因为不利于阅读和修改,只有编程的个人比较熟悉程序的结构。这不利于程序的扩展性和协同开发。所以,我们引入一个固定的模式来进行编程,使得所有代码结构清晰明确,而且易于扩展延伸。

  此处介绍的一种模式是分层模式。把程序分成几个层次:界面层、业务逻辑层、数据层。

  界面层:主要功能就是实现界面的显示。比如要在登陆页面显示输入框之类,就需要login.php中放入form表单。比如要显示雇员信息,就需要empList.php来显示从数据库中获取的信息。但是,login.php中获取的输入数据是否合法与界面层无关;empList.php中显示的信息界面层也不用管来自哪里,它只要完成显示就行。具体这些数据操作都交给业务逻辑层来做,它要做的只是接受业务逻辑层反馈回来的结果并作出相应显示即可。

  业务逻辑层:主要功能是实现逻辑处理,与界面层无关。该层主要包括 Admin.class.php,AdminService.class.php,Emp.class.php,EmpService.class.php等,Admin、Emp表示数据库中的两张表。

其中,Admin.class.php、Emp.class.php均为类,类内的成员变量就是各个表格自己的属性;

   AdminService.class.php、EmpService.class.php均为类,主要作用就是为两张表格的操作提供函数支持;

除此之外,业务逻辑层还包括 SqlHelper.class.php助手类,主要提供mysql数据库操作支持。其他函数想要对数据库进行操作都要通过调用该助手类来操作数据库,例如完成 增删改查 操作。

  数据层:就是指mysql数据库,在数据库里存放着要使用的表格Admin和Emp。这是最低层的数据库资源。

针对雇员信息管理系统,来分别讲解着三个层:

  界面层:login.php empList.php等:login.php负责显示表单供用户输入,输入数据的合法性交给loginProcess.php来处理,而loginProcess.php又会去调用AdminService.class.php中的CheckAdmin()函数来验证并返回结果。

                   empList.php负责来显示雇员信息,它的数据来自empManage.php,而这个php又会调用EmpService.class.php来实现实际操作。

  业务逻辑层:CheckAdmin()通过调用sql助手类来对数据库操作,验证输入的信息是否合法。

        SqlHelper.class.php助手类主要提供各种对数据库的基本操作,例如:构造函数要实现获取连接、指定数据库、设置编码格式;execute_dql($sql)实现执行查询指令,返回$res;execute_dml($sql)实现增删改操作,返回$res;mysql_close_conn()自动关闭助手类中定义的连接。

  数据层:就是最低层的数据库。

2、mvc模式

  • (控制器Controller)- 负责转发请求,对请求进行处理。
  • (视图View) - 界面设计人员进行图形界面设计。
  • (模型Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
  • 模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。(比较:观察者模式软件设计模式))
  • 视图(View)能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
  • 控制器(Controller)起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

3、设计模式

  设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

  

设计原则编辑

为什么要提倡“Design Pattern呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?面向对象有几个原则:开闭原则(Open Closed Principle,OCP)、里氏代换原则(Liskov Substitution Principle,LSP)、依赖倒转原则(Dependency Inversion Principle,DIP)、接口隔离原则(Interface Segregation Principle,ISP)、合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)、最小知识原则(Principle of Least Knowledge,PLK,也叫迪米特法则)。开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他几条,则可以看做是开闭原则的实现方法。

设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。

开闭原则

此原则是由Bertrand Meyer提出的。原文是:“Software entities should be open for extension,but closed for modification”。就是说模块应对扩展开放,而对修改关闭。模块应尽量在不修改原(是“原”,指原来的代码)代码的情况下进行扩展。那么怎么扩展呢?我们看工厂模式“factory pattern”:假设中关村有一个卖盗版盘和毛片的小子,我们给他设计一“光盘销售管理软件”。我们应该先设计一“光盘”接口。如图:

[pre]______________

|<>|

| 光盘 |

|_____________|

|+卖() |

| |

|_____________|[/pre]

而盗版盘和毛片是其子类。小子通过“DiscFactory”来管理这些光盘。代码为:


1

2

3

4

5

6

7

8

9

10

11

publicclassDiscFactory{

publicstatic光盘getDisc(Stringname){

//return(光盘)Class.forName(name).getInstance();

return(光盘)Class.forName(name).newInstance();

}

}

有人要买盗版盘,怎么实现呢?


1

2

3

4

5

6

publicclass小子{

publicstaticvoidmain(String[]args){

光盘d=DiscFactory.getDisc("盗版盘");

d.卖();

}

}

如果有一天,这小子良心发现了,开始卖正版软件。没关系,我们只要再创建一个“光盘”的子类“正版软件”就可以了,不需要修改原结构和代码。怎么样?对扩展开放,对修改关闭——“开闭原则”。

工厂模式是对具体产品进行扩展,有的项目可能需要更多的扩展性,要对这个“工厂”也进行扩展,那就成了“抽象工厂模式”。

里氏代换原则

里氏代换原则是由Barbara Liskov提出的。如果调用的是父类的话,那么换成子类也完全可以运行。比如:


1

2

光盘d=new盗版盘();

d.卖();

要将“盗版盘”类改为“毛片”类,没问题,完全可以运行。Java编译程序会检查程序是否符合里氏代换原则。还记得java继承的一个原则吗?子类override方法的访问权限不能小于父类对应方法的访问权限。比如“光盘”中的方法“卖”访问权限是“public”,那么“盗版盘”和“毛片”中的“卖”方法就不能是protected或private,编译不能通过。为什么要这样呢?你想啊:如果“盗版盘”的“卖”方法是private。那么下面这段代码就不能执行了:


1

2

光盘d=new盗版盘();

d.卖();

可以说:里氏代换原则是继承复用的一个基础。

依赖倒转原则

抽象不应该依赖于细节,细节应当依赖于抽象。

要针对接口编程,而不是针对实现编程。

传递参数,或者在组合聚合关系中,尽量引用层次高的类。

主要是在构造对象时可以动态的创建各种具体对象,当然如果一些具体类比较稳定,就不必在弄一个抽象类做它的父类,这样有画蛇添足的感觉

接口隔离原则

定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干。

合成/聚合复用原则

合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)经常又叫做合成复用原则。合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。

就是说要少用继承,多用合成关系来实现。我曾经这样写过程序:有几个类要与数据库打交道,就写了一个数据库操作的类,然后别的跟数据库打交道的类都继承这个。结果后来,我修改了数据库操作类的一个方法,各个类都需要改动。“牵一发而动全身”!面向对象是要把波动限制在尽量小的范围。

在Java中,应尽量针对Interface编程,而非实现类。这样,更换子类不会影响调用它方法的代码。要让各个类尽可能少的跟别人联系,“不要与陌生人说话”。这样,城门失火,才不至于殃及池鱼。扩展性和维护性才能提高。

理解了这些原则,再看设计模式,只是在具体问题上怎么实现这些原则而已。张无忌太极拳,忘记了所有招式,打倒了“玄冥二老”,所谓“心中无招”。设计模式可谓招数,如果先学通了各种模式,又忘掉了所有模式而随心所欲,可谓OO(Object-Oriented,面向对象)之最高境界。呵呵,搞笑,搞笑!

最少知识原则

也叫迪米特法则。不要和陌生人说话。

分层模式开发+MVC模式开发--韩顺平雇员数据库管理,布布扣,bubuko.com

时间: 2024-12-24 14:35:52

分层模式开发+MVC模式开发--韩顺平雇员数据库管理的相关文章

为什么要使用MVC模式,MVC模式的优势有哪些?请写出你熟悉的MVC轻量级框架名称。

MVC就是常说的:模型(Model),视图(View)和控制Controller) 它把业务处理和Jsp页面分开了.而以前的Jsp页面是把所有的代码都写在Jsp页面中,那样不利于维护 MVC模式的目的就是实现Web系统的职能分工. MVC模式的好处: 1.各施其职,互不干涉 在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码. 2.有利于开发中的分工 在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工.网页设

韩顺平-雇员管理系统-学习小结

1.loginProcess.php将从表单login.php中获取的$username = $_POST['username'];进行验证时,要从数据库获取该用户名的密码. $sql="select password from admin where name='$username'"; 一定要注意,要$username要被 ' ' 包围才行!! 2.验证密码:一般在数据库中保存密码时都会被 md5加密,故在验证时也要对输入密码加密一下 md5(string) if($row=mys

Web开发的分层结构与MVC模式

1.分层结构 所谓分层结构.把不同的功能代码封装成类,把相同功能的类封装在一个个的包中,也叫层.功能归类如下: 实体类: 封装数据,是数据的载体,在层与层之间进行传递,数据也就传递了.比如说要传递学生信息,把学生信息封装成一个Student对象,传递到其它的类中.如果有多个学生对象,则再次封装成集合,进行传递.我们把所有的实体类放在一个包中(层),层的命名通常用entity或model.数据库中有多少表,则程序中就有多少实体类.实体类的命名与表名一致,实体类中的属性名与表中的字段名一致. 持久化

mvvm模式和mvc模式 概述总结对比

1.mvc模式简介: MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范.例如: angular 在网页当中, V即View视图是指用户看到并与之交互的界面.比如由html元素组成的网页界面,或者软件的客户端界面.MVC的好处之一在于它能为应用程序处理很多不同的视图.在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式. M即model模型是指模型表示业务规则.在MVC的

mvvm模式跟mvc模式的区别浅析

最近开始学习vue.js了,开始接触到mvvm(Model-View-ViewModel),在这里简单的记录下对于这种模式的理解. 以前一直是用的MVC(Model-View-Controller)模式,一直没明白这两个之间的区别,下去查了下资料,借用一下大神的图: MVC模式: View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状态 Model 将新的数据发送到 View,用户得到反馈 MVVM模式: 以上两张图就可以简单看到这两者之间的区

前端Web开发MVC模式-入门示例

MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:control为servlet程序控制跳转和工作流. 随着前端Ajax兴起.前端开发工作进一步划分:js程序员和ue页面制作.另外从整个前端项目的清晰明朗可以扩展性角度来看,MVC的应用也越来越必要,特别是对大的项目? 例如 需要给一个页面上的button注册一个onclick事件. 1.我们可以有如下最简洁的写法:(view和model c

Ios 项目从头开发 MVVM模式(三)

1.话说,本来想做个聚合查询功能,但是我的重点想研究xmpp聊天功能.所以使用mvvm模式做了完全模式51job主界面的页面. 2.首先给大家看我运行起来的界面. 3.界面很简单,做这个界面主要是为了比较mvvm模式和mvc模式之间的区别. 4.这个界面的结构是下边这张图片 与mvc相比,我多了一个viewmodel文件. mvc之前是把业务逻辑和数据放在viewcontroller里边,逻辑复杂的话,别人维护起来很麻烦. 我就不贴viewcontroller的图片了,我把这个代码上传给大家,大

MVC模式

模式1把业务代码从JSP页面中分离了出去,减少了JSP的Java代码量,但在JSP页面中还有一些处理控制的Java代码.如果项目规模大,业务复杂,可能JSP中的处理控制的Java代码就会很杂乱.为了解决这个问题,可以把Servlet和 JSP结合起来,用Servlet接收用户提交的请求,调用业务方法,再转发给JSP页面显示结果 .以上所说的结构称为模式2. 模式2是一种MVC模式.MVC模式分为3层:业务层(Model)是进行业务处理的,表示层(View)是用来与用户交互的,控制层(Contro

Django中的模式(mvc)

最近准备用Python做做网站,框架选了django,第一次接触web框架,感觉很陌生,model view什么的很奇怪,不过了解了mvc这个模式之后好了很多,今天记录下web中长见的几种模式. 以下内容转自:http://blog.csdn.net/hudan2714/article/details/50990359 MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数