学员会诊之03:你那惨不忍睹的三层架构

栏目: 数据库 · 发布时间: 6年前

内容简介:最近检查作业,虽然我们反复强调三层架构就是:表示层、业务逻辑层、数据访问层,每个层只做自己应该做的事情,但是,部分同学的作业还是不理想啊~~~你以为的三层架构是这样的:

最近检查作业,虽然我们反复强调三层架构就是:表示层、业务逻辑层、数据访问层,每个层只做自己应该做的事情,但是,部分同学的作业还是不理想啊~~~

你以为的三层架构是这样的:

学员会诊之03:你那惨不忍睹的三层架构

而实际上你的三层架构是这样的:

学员会诊之03:你那惨不忍睹的三层架构

如果我们尚不能完全了解把握各个层的边界,那么我们首先仅需要记住下面两句话:

1:除了UI层,任何其它层不要出现System.out;

2:除了DAO层,任何其它层不要出现SQL;

1.除了UI层,任何其它层不要出现System.out

在三层架构的作业中,我们写到:

学员会诊之03:你那惨不忍睹的三层架构

这句话本来说的是service层应该是和具体的数据存储无关的,但是反过来说,service同时也应该是和具体的页面展示无关的。这是什么意思呢?

学员会诊之03:你那惨不忍睹的三层架构

先来看赵同学的这个项目结构:

学员会诊之03:你那惨不忍睹的三层架构

Very清晰,没有任何问题(其实有问题)。但现在让我们打开biz下的一个文件:

学员会诊之03:你那惨不忍睹的三层架构

可以看到,在Service层的ScoreService相关方法中,出现了很多接受用户输入的代码。

这是不能接受的,如果是在BS程序中,相当于我们把网页写到了service层。

接受用户输入一定是在UI层完成的,修改之后的这两个方法,应该长成这样才行:

学员会诊之03:你那惨不忍睹的三层架构

仔细比对下之前的save。在调用save方法之前,name和pwd和grade应该在UI层就已经得到了。另外,我也去掉了id,为什么呢?如果你的id在数据库中是自增的,那么根本不需要得到它。当然存在一种情况,我们不需要id由数据库自己生成,而是由代码根据业务特点自己生成,那么确实就应该放在Service的当前方法来生成。但是看这段代码,显然不需要,因为赵同学首先从数据库取id的max值,然后+1,然后再insert回去,那不就是数据库的自增字段吗?所以这样做又是何必呢。

上面的save还可以继续改造

学员会诊之03:你那惨不忍睹的三层架构

也就是说,service所要参数是UI层已经构造好的对象。到了web阶段,尤其使用了各种MVC框架后,这些对象可以直接由框架构造好,故service层用到的参数是这些实体对象才是更常见的。

2.除了DAO层,任何其它层不要出现SQL

接着来看第二个同样重要的问题

学员会诊之03:你那惨不忍睹的三层架构

怎么可以这样呢,赵同学,你伤我的心了~~~

学员会诊之03:你那惨不忍睹的三层架构

你可是一个月写了6篇博客的同学,然而到了这个作业一下子坍塌了,是不是太骄傲导致你看都不看什么是三层架构?

请把所有见得到的 sql 丢到dao层去。

3.Dao层返回什么?

赵同学的作业简直惨不忍睹,把所有能犯的错误全部犯了,如下:

学员会诊之03:你那惨不忍睹的三层架构

在这个queryall的dao方法中,它返回了一个void,然后列表直接在方法中遍历输出,我只能说一个大大的服

学员会诊之03:你那惨不忍睹的三层架构

而正常的做法是,返回List<Score>,然后在UI层输出。

除了select,CRUD中的CUD返回什么呢?

Insert、update、delete语句JDBC都会返回一个int值,表明在数据库中影响的行数,举例来说,

如果新增一条记录,则jdbc返回的就是1;

如果更新了10条记录,则jdbc返回的就是10;

而dao就是要真实反映数据库操作,故以赵同学的delete为例

学员会诊之03:你那惨不忍睹的三层架构

应该修改为:

学员会诊之03:你那惨不忍睹的三层架构

看到没,我连方法名都改了(哼哼,还有SQL注入哦)。

4.Service怎么处理dao层返回的int值?

Service层不应该再反映数据库的状态了,所以,以deleteByName为例,service应该这么写:

学员会诊之03:你那惨不忍睹的三层架构

或者这么写:

学员会诊之03:你那惨不忍睹的三层架构

如果是第一种写法,得有一个全局处理异常的地方,如果是后一种写法,则UI层自己展示删除结果信息给用户。

5.其它问题

A:SQL注入。这个问题就不多说了,用参数化SQL解决之;

B:分层不应该用package,而应该是project,这是作业里面要求的;

C:命名不规范;

暂时就这些吧,如果写多了估计会打击赵同学的积极性,毕竟,我们还要赵同学笑着活下去呢~~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大教堂与集市

大教堂与集市

[美] Eric S. Raymond / 卫剑钒 / 机械工业出版社 / 2014-5 / 59.00元

当代软件技术领域最重要的著作,中文版首次出版! 《大教堂与集市》是开源运动的《圣经》,颠覆了传统的软件开发思路,影响了整个软件开发领域。作者Eric S. Raymond是开源运动的旗手、黑客文化第一理论家,他讲述了开源运动中惊心动魄的故事,提出了大量充满智慧的观念和经过检验的知识,给所有软件开发人员带来启迪。本书囊括了作者最著名的“五部曲”,并经过作者的全面更新,增加了大量注释,提高了可读......一起来看看 《大教堂与集市》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具