【转】谈谈三层架构中MODEL的作用

Model又叫实体类,这个东西,大家可能觉得不好分层。包括我以前在内,是这样理解的:UI<-->Model<-->BLL<-->Model<-->DAL,如此则认为Model在各层之间起到了一个数据传输的桥梁作用。不过在这里,我们不是把事情想简单,而是想复杂了。
    Model是什么?它什么也不是!它在三层架构中是可有可无的。它其实就是面向对象编程中最基本的东西:类。一个桌子是一个类,一条新闻也是一个类,int、string、doublie等也是类,它仅仅是一个类而已。
    这样,Model在三层架构中的位置,和int,string等变量的地位就一样了,没有其它的目的,仅用于数据的存储而已,只不过它存储的是复杂的数据。所以如果你的项目中对象都非常简单,那么不用Model而直接传递多个参数也能做成三层架构。
    那为什么还要有Model呢,它的好处是什么呢。下面是思考一个问题时想到的,插在这里:   
    Model在各层参数传递时到底能起到做大的作用?
    在各层间传递参数时,可以这样:
    AddUser(userId,userName,userPassword,…,)
    也可以这样:
    AddUser(userInfo)
    这两种方法那个好呢。一目了然,肯定是第二种要好很多。
    什么时候用普通变量类型(int,string,guid,double)在各层之间传递参数,什么使用Model传递?下面几个方法:
    SelectUser(int UserId)
    SelectUserByName(string username)
    SelectUserByName(string username,string password)
    SelectUserByEmail(string email)
    SelectUserByEmail(string email,string password)
    可以概括为:
    SelectUser(userId)
    SelectUser(user)
    这里用user这个Model对象囊括了username,password,email这三个参数的四种组合模式。UserId其实也可以合并到user中,但项目中其它BLL都实现了带有id参数的接口,所以这里也保留这一项。
    传入了userInfo,那如何处理呢,这个就需要按照先后的顺序了,有具体代码决定。
    这里按这个顺序处理
    首先看是否同时具有username和password,然后看是否同时具有email和password,然后看是否有username,然后看是否有email。依次处理。
    这样,如果以后增加一个新内容,会员卡(number),则无需更改接口,只要在DAL的代码中增加对number的支持就行,然后前台增加会员卡一项内容的表现与处理即可。

时间: 2024-09-16 11:00:33

【转】谈谈三层架构中MODEL的作用的相关文章

service层设计-关于三层架构中service dao 和实体的设计实现的疑问

问题描述 关于三层架构中service dao 和实体的设计实现的疑问 在 java 的三层架构中一直有几个问题困扰着我一直不得解决,特在此请教各位大神,还请各位大大,不腻赐教 场景: 加入现在是一个教务系统里面包含数据库表 课程表,学生表,学生购买的课程表 课程表 学生表 学生购买的课程表 这个时候如何设计实体类呢 学生实体1 public class student { private Integer id; private String name; private String birth

c#-MVC三层架构中的的添加功能怎么写

问题描述 MVC三层架构中的的添加功能怎么写 在MVC 三层架构中 DAL层的代码怎么写 BLL层的代码怎么写 视图中的模板页怎么用 解决方案 MVC不过是个编程规则,指导思想,它只是在指引技术应该怎样设计 搞.NET的话有ASP.NET MVC,具体下载个PDF或者视频啃啃吧 解决方案二: 好像没有三层架构的概念,在你建好各个类拉好关系后会自动生成数据库,也可以用自己建的数据库(要完全对应),如果你要三层架构是要操作数据库的话 mvc我是用Tolinq(就像在cs写sql语句一样),把数据结果

三层架构中,层与层之间返回消息,怎么实现比较好?

问题描述 三层架构中,层与层之间返回消息,怎么实现比较好?举个例子:比如UI层调用业务逻辑层,业务逻辑层会告诉UI层:操作成功.或者用户没有该操作权限.内部报错啊等等之类的消息.请教一下各位有经验的朋友们,这种层与层之间的信息通信怎么设计和实现比较好.谢谢! 解决方案 解决方案二:执行结果之类的直接用INT就可以再标准点就用ENUM但是要是返回一张表最好自定义类来实现比较好解决方案三:或者用户没有该操作权限.内部报错啊===这些可以添加TRY..CATCH捕获到异常直接在BLL抛出WEB写个基类

三层架构中数据库访问的问题

问题描述 这里主要是想问一个结构的问题.当然我测试链接成功以后,我关闭了数据库配置界面.内存里面其实是把我点击测试链接以后的数据给释放了.再返回到登录验证用户名这个环节的时候,无法执行一些SQL的查询语句了.有什么方法可以让数据库连接保存或者下来.或者一般在三层架构中,数据库链接这块,是放在DAL这层去处理?还是说哪一层?特别小白的一个问题,感谢大家指导! 解决方案 解决方案二:起码数据库连接对象不应该放在窗体中,这样的话它会随着窗体释放而被回收解决方案三:这不是结构问题,而是流程问题测试数据库

三层架构中找不到命名空间问题

问题描述 找不到类型或命名空间名称"ComboBox"(是否缺少using指令或程序集引用?):未能找到元数据文件.怎么解决啊,我刚学三层架构,很简单的一个小项目,都没用上models,请大侠们帮帮忙. 解决方案 解决方案二:在WindowsFormApplication工程以外的地方,用到了ComboBox?(需要添加System.Windows.Forms.dll)usingSystem.Windows.Forms;但这显然是不好的设计.解决方案三:引用1楼fangxinggood

有人在吗,问一下asp.net三层架构中不清楚的问题

问题描述 1,画面上的一些控件,对应不同表的数据,是应该用不同表对应的实体来填充,还是针对画面上的控件,在单独整一个实体出来2,商业逻辑层,如果是针对多表的复杂操作,应该放在哪里3,bll层查询返回多行时,用datatable就可以,有必要用对象的集合吗,感觉多此一举 解决方案 解决方案二:以下只是本人的想法:1,对于像列表这种实体绑定,如果字段太多可以根据显示的要求,整一个只读的实体出来.2,可以用存储过程中进行.3,面向对象用实体类集合有更好的封装.还有就是datatable不是强类型的.解

三层架构中业务逻辑层的实现方式有哪些

问题描述 如题,比如说webservice,最好是应用程序和网页都能调用的接口 解决方案 解决方案二:BLL层一般都是继承接口实现,使用接口可以扩展业务逻辑.解决方案三:引用1楼duanzi_peng的回复: BLL层一般都是继承接口实现,使用接口可以扩展业务逻辑. 我就是想问接口的实现技术有哪些解决方案四:目前比较流行的是wcf解决方案五:所谓"业务逻辑",就是你的业务所需要处理的逻辑呀!虽然数据的增删改查也是业务,但一般直接放在数据访问层实现.举个例子,你用三层来实现登录的话,判断

三层架构中传实体类

问题描述 比如:表示层:manager.deleteUsers(customerInfo,cardInfo,refrecustomerInfo,refrecardInfo)逻辑层:service.deleteUsers(customerInfo,cardInfo,refrecustomerInfo,refrecardInfo)访问层:publicstringdeleteUsers(CustomerInfocustomerInfo,CardInfocardInfo,refCustomerInfor

linq to sql 三层架构中使用CRUD操作

/// <summary> /// 数据层 /// </summary> public partial class GasBottles : IGasBottles { #region IGasBottles 成员 public Model.GasBottles GetModel(int gasBottlesID) { var db = DbContext.LGSCMSDataContext; try { var gs = db.GasBottles.FirstOrDefault(