学员会诊之02:SVN协作以及Page类的设计
2018-09-18 06:36:19来源:博客园 阅读 ()
三层架构的学生管理系统是我们第一个稍微大型的项目:分层、一个解决方案多个Project,所以值得我们停下来好好审查审查。
1.测试SVN服务器地址
我们的作业要求学员创建自己的SVN服务器,并且将代码commit上去,然后讲师进行批改是从源码服务器上获取代码,继而review。这非常类似于敏捷开发中的同行审查。在企业中,我们一般也是这样做代码审查的。
既然要审查代码,那么第一件事情就是要把代码从学生的服务器上check out下来,所以我第一步就是找学生要刘同学的SVN服务器地址以及用户名、密码,这次我们审核的是另一位刘同学,如下:
上面图示中,我打了一个叉叉和一个对勾。叉叉的地方是刘同学自己去SVN中copy地址出来的,然后我们要转换成自己在局域网中的地址才行。
怎么查自己的本机地址?记得回去敲cmd命令:ipconfig。如果你发现没有此命令,记得要以管理员身份运行cmd。
紧接着,拿到刘同学的地址,首先测试下是否已经联通,于是打开浏览器,敲入地址,如下:
在这次连接中,我们发现刘同学在服务器配置SVN的时候,使用的是https的协议,所以要点击上图中的“高级”(PS:不同的浏览器设置形式不一样)。
然后点击下图中的继续前往
出意外,会弹出用户名和密码框。这个用户名和密码是刘同学在SVN服务器上专门为我设置的。
如果看到下图,说明已经成功。
2.获取单个项目源码
接下来,让我们在eclipse中check out代码。
首先,点击import
选择 Project from SVN
点击creat a new respository location
输入地址。记住,这一步同时要输入用户名和密码,然后,记得勾选Save authentication。
点击finish
接下来会问你是否信任连接,直接“Trust Always”,然后下一个页面选择Java Project
在接下来的这个页面,我们要select resource,如下。注意,我们刚才获取到的地址是:https://192.168.1.125:9443/svn/zuikc/。但是这里有个问题,因为我们发现我们的项目是在这个地址的子文件中,所以,我们要输入全路径,如下,
下一步,默认finish
然后,弹出这个界面,选择Java Project
Next之后,让我们输入project name,如下
点击finish,这次是真的finish了。
3.获取全部项目源码
在这个作业中,我要求大家将项目分成多个project。上面只是获取最底层的bean。紧接着我们按照从下到上的次序依次获取项目。
先common。Common下来后,你大概会看到一些错误
为什么呐?
第一个原因,因为我们在common中用到了jdbc,所以,如果我们创建lib文件夹,将jdbc包引入进来,就会出现找不到包的情况;
第二个原因,即便引入,如果没有正确导入到build path中,也会出现错误。那怎么修复?如下:
接着导入dao,同样,有可能碰到这样的问题
重新引入jar包、common和bean吧,
接下来的几个项目也类似哦。全部完毕后,是这样的:
4.问题分析之Page类的设计
刘同学的代码完成度很高。不过还有一个小小的不完美的地方。我们可以看到在分页这个部分,刘同学有意识的创建了一个Page类,现在来看看Page类长什么样:
package com.zuikc.usermanagement.dao; public class Page { //设置每页行数 public static final int PAGE_SIZE = 5; //起始行号 private int startRow; //总行数 private int rows; //总页数 private int pages; //当前页号 private int currentPage; public int getStartRow() { return startRow; } public void setStartRow(int startRow) { this.startRow = startRow; } public int getRows() { return rows; } public void setRows(int rows) { this.rows = rows; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } }
方向是对的,这里确实得有一个Page类。
但是放错了地方:
Page类它不应该是dao层的东西,而是一个特殊的bean。
为什么说它特殊呢,接下来就要引入第二个问题了。Page类中缺少了东西。最重要的一个东西就是要包装的类型的列表属性,比如:List<User>。
为什么要这个包装属性呢?我们可以看一下刘同学的service:
在刘同学的UserService的分页查询函数中,直接返回的是List<User>。但是,我们在上层调用的时候,除了获取当前页的信息之后,一般还需要获取:当前是第几页、每页显示多少条、总共多少页这样的信息。你可能会说:简单啊,上层针对这些属性多调用几个这样的service方法不就行了?
行是行。但是上层在设计上只是负责显示的,我们应该让这些逻辑上的工作放置到service层中,也就是说:在调用queryUsersByPage的时候,应该将这些属性一次性返回!那怎么返回,要知道方法只能有一个返回值。没办法了,我们只能把这些属性,连同List<User>封装到一个类里,比如Page里返回。
于是,Page类变成了:
变化有:
1:Page跑到了bean;
2:Page增加了Users属性;
紧接着问题又来了,那以后要是对老师分页呢?难道增加一个teachers的属性?
显然不行!
有没有更好的办法?当然有,就是泛型。我们将属性改为如下:
至此,我们的Page才成为了一个通用的Page类。
然后Service层修改为:
接下来,自己去修改整个page实现吧。
5.其它小问题
连接没有及时关闭:
SQL注入漏洞:
6.提交批改
7.学生查看批改
当然是update源码到本地了。
你也可以在history里面看看我提交了批改没有,查看下吧:
华丽分割线
===========================================================
最课程JavaEE+互联网分布式新技术开班进行中,来http://www.zuikc.com看看吧。你想参加不一样的培训班,并且一毕业就NB,那就来加入我们吧;
更多技术文章和开班信息请加入,
QQ群:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Java实习生面试题整理
- IDEA使用svn拉取多模块项目 2019-09-08
- 使用SVN钩子强制提交日志和限制提交文件类型 2019-09-04
- java svn连接工具svnKit使用 2019-08-16
- 零基础学员学习Java时,如何打好基础并形成编程思维? 2019-05-13
- Linux服务器安装tomcat、JDK、SVN等常用开发软件总结 2019-01-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash