Model,与数据库,框架和开发方式无关

Model

与数据,框架和开方式无关

知识产权保护请从我做起,转载请注明出处。

http://blog.csdn.net/struts2

代码示例请参看:http://code.google.com/p/mdx-shopping

概述

Model就不得不提件开发领域著名的构架模式:MVC

MVC是一种件构架,在被认为件工程中使用的一种构架模式.这个模式将域逻辑(用户使用的应用程序逻辑)从用户界面(输入和表示)中分离出来,从而可以独立开发、测试和维护每一部分(关注分离)。

原文参看:

http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller

MVC这三个字母风别是ModelViewController的首字母,一下这边文章主要探讨一下什么是Model,如何设计和实现Model

Model是什么

Model是什么:

要回答Model是什么,需要从理解Model的定义开始。

根据MVC的定义,Model是域逻辑,或者可以通俗地理解为用户需要使用的应用程序的逻辑,或者跟简单一些就是用户的需求。

用户需求通常包含两部分的内容,做什么操作和得到什么结果。

做什么操作就是需要帮助用户完成什么业务逻辑,毕竟软件的初衷就是帮助客户完成一些原本用户需要重复做的事情。

得到什么结果就是做完用户期望的操作之后,得到什么结果,或许这才是用户最期望的内容,通常情况下这些内容需要被保存下来。

概括起来说,Model就是用户操作和被操作的数据的结合体。

Mode不是什么:

<!--[if !supportLists]-->(1) <!--[endif]-->Model是数据库吗?

简单地回答,不是。不过上面说过Model通常需要被存储起来,以供客户使用。而数据库又是最常见的数据存储的手段,所以可以这样说,Model的数据部分需通常存储在数据库中。

<!--[if !supportLists]-->(2) <!--[endif]-->Model可以不包含用户逻辑吗?

通常情况下不可以。Model不进包含数据,也包含对这些数据的有意义的业务操作,只有数据结合了这些有意义的操作才真正成为了Model。没有业务逻辑的数据其实已经退化为了VO或者DTO

总结:

Model是业务逻辑和数据的结合体。业务逻辑体现了客户期望做什么,而数据体现了客户通过期望的操作想得到什么。

实例分析:

以下以用户管理为例,分析一下在这个CaseModel到底是什么。

通常的用户管理包含两个角色,第一是用户本身,第二是管理用户的管理员。

而需要做的操作可以按照角色的不同来分组:

<!--[if !supportLists]-->l <!--[endif]-->对于用户本身来说,期望能够注册为系统的一个用户,希望能够使用注册用户登陆系统,同时希望能够定期修改密码。

<!--[if !supportLists]-->l <!--[endif]-->对于管理员来说,希望能够了解总共有多少个用户,最好能够将用户分组管理,如果能够禁用默写用户就更好了。

在理解了这些需求的基础上,我们下面分析这个Case中的Mode

业务逻辑(或者可以说是操作)部分:

<!--[if !supportLists]-->l <!--[endif]-->用户:注册,登陆,修改密码

<!--[if !supportLists]-->l <!--[endif]-->管理员:查看所有用户,用户分组,启用和禁用用户。

数据部分:

根据常规的情况,至少需要用户登录名,密码和是否有效三个数据。

所以在用户管理的Case下,Model可以理解为:

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="图示_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75" style='width:222.75pt;height:125.25pt;visibility:visible' o:gfxdata="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 Ai0AFAAGAAgAAAAhAAWivkKaAQAARwQAAB8AAAAAAAAAAAAAAAAAGQ4AAGNsaXBib2FyZC9kcmF3 aW5ncy9kcmF3aW5nMS54bWxQSwECLQAUAAYACAAAACEAOT3+zzABAAD8AwAAKgAAAAAAAAAAAAAA AADwDwAAY2xpcGJvYXJkL2RyYXdpbmdzL19yZWxzL2RyYXdpbmcxLnhtbC5yZWxzUEsBAi0AFAAG AAgAAAAhAEtAIsXfBgAAOBwAABoAAAAAAAAAAAAAAAAAaBEAAGNsaXBib2FyZC90aGVtZS90aGVt ZTEueG1sUEsBAi0AFAAGAAgAAAAhAAPAojwRBAAA30EAAB4AAAAAAAAAAAAAAAAAfxgAAGNsaXBi b2FyZC9kaWFncmFtcy9jb2xvcnMxLnhtbFBLAQItABQABgAIAAAAIQBZy6Sa2wMAAA1RAAAiAAAA AAAAAAAAAAAAAMwcAABjbGlwYm9hcmQvZGlhZ3JhbXMvcXVpY2tTdHlsZTEueG1sUEsBAi0AFAAG AAgAAAAhANkMgHm5BwAA6zQAAB4AAAAAAAAAAAAAAAAA5yAAAGNsaXBib2FyZC9kaWFncmFtcy9s YXlvdXQxLnhtbFBLAQItABQABgAIAAAAIQDPWa8+4AAAAJABAAAfAAAAAAAAAAAAAAAAANwoAABj bGlwYm9hcmQvZGlhZ3JhbXMvZHJhd2luZzEueG1sUEsFBgAAAAAKAAoA5gIAAPkpAAAAAA== "> <v:imagedata src="file:///C:\Users\mazhao\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title="" /> <o:lock v:ext="edit" aspectratio="f" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

现在可以点题了,Mode就是用户通常使用的操作和期望得到的结果,可以操作可以通过BS结构来完成,也可以通过CS结构来完成,可以存储在数据库中,也可以存储在文件系统中,可以使用Struts也可以不使用Struts而直接使用Servlet。可以给予J2EE当然也可以基于.NET平台。

Mode实现

尽管Model并不依赖于任何框架或者技术,但是为了讨论的方便,我们还是做了以下假定,在一下假定的范围内讨论Model的实现

<!--[if !supportLists]-->l <!--[endif]-->使用Java语言

<!--[if !supportLists]-->l <!--[endif]-->Model的数据部分保存在数据库中

<!--[if !supportLists]-->l <!--[endif]-->使用MyBatis来简化数据保存的操作

Model实现的两种方式:

<!--[if !supportLists]-->l <!--[endif]-->Manager(逻辑) + VO(数据):这种方式将数据与操作隔离,所有的操作都由Manager来完成,而VO通常承担了数据传输对象的作用,用来在前台ViewManager之间,以及Manager和数据库之间传递数据。本文中不详细讲解这种方式,这种方式较为普遍,请各位自行查阅。

<!--[if !supportLists]-->l <!--[endif]-->Model(逻辑+数据):这种方式注重数据与操作的整合,一下主要探讨这种方式。

实例分析:

仍旧以用户管理为例逐步分析Model的实现。

第一步,数据部分首先应该添加在Model中,这部分内容比较简单,参看以下代码:

public class LoginInfoData extends ModelObject {

private String username;

private String password;

private boolean isActive;

// getter method and setter method

}

第二部,将操作封装在Model中。但是在封装用户操作之前还有一个问题需要说明。用户操作分为两类,第一类,无中生有,第二类,有则改之。

无中生有最典型的操作是查看所有用户,而有则改之最典型的操作是修改密码。由于无中生有通常不是对某个单独的对象进行操作,所以通常设计为静态的类方法,而有则改之通常是对某一个具体实例的操作,所以通常设计为实例方法。参看以下代码:

public class LoginInfo extends LoginInfoData {

/**

* register user and connect role of user to him.

* @return true for success, false else

*/

public boolean register() {

//...

}

public static List<LoginInfo> getAll() {

//

}

}

其他的通用方法:

对于单个对象的CRUD通常应该以一种共同的方式实现,或者使用代码自动生成。请注意上述代码的继承层次关系。

Mode使用:

用户登录

protected boolean checkUserLoginInfo() {

LoginInfo info = new LoginInfo();

info.setUsername(getModel().getUsername());

if (info.load() &&

info.getPassword().equals(Digester.crypt(getModel().getPassword()))) {

// add role id and role

this.loginInfo = info;

return true;

} else {

return false;

}

}

密码修改:

public String changePassword() {

log.debug("enter customer/changepwd action, model:" + model);

// 1. check password and repassword

if (!model.getPassword().equals(model.getRePassword())) {

return INPUT;

}

// 2. check old password

LoginInfo info = new LoginInfo();

info.setUsername(getModel().getUsername());

if (!info.load() || !info.getPassword().equals(Digester.crypt(getModel().getPassword()))) {

// old user not exist or old password not equals

return INPUT;

}

// 3. generate new password hash

String newpwd = Digester.crypt(model.getPassword());

info.setPassword(newpwd);

// 4. update login info

info.update();

log.debug("update password successfully!");

return SUCCESS;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值