您的位置:首页 > 其它

敏捷开发的一次实践-划分模块

2016-04-17 07:39 302 查看
学习开发一年多一点了,都没有开发完一个中大型的项目。半年前想做一个中型的项目,由于没有经验,以及能力不足,所以这半年以来也没有开发完成。好在现在差不多能完成了。

下面我将记录下,从开始时的毫无头绪,项目结构混乱,到现在项目结构相对比较清晰,系统架构相对比较完善的过程中,最重要的一点-模块化。

现在我们的做法是:

①将项目大体分成几个相互独立的模块,如课程模块和个人管理模块。

②考虑每一模块内部都需要什么功能并迅速构建模型。

③根据功能写出服务以及DAO,建立数据库原型

④不断完善页面并更新完善DAO,以及数据库结构

⑤交付此模块并按上面的步骤进行下一模块的开发。

下面结合具体例子,来分析一下模块化的优点:

①低耦合,高内聚。将密切相关的功能、数据库表划分到一个模块,其他模块访问该模块时,通过一个URL以及相关参数访问。

譬如,我们的项目划分为课程模块、个人管理模块以及交易模块。通过分析我们可以得知,课程模块需要用户信息,交易模块也需要用户信息,而用户信息是
个人管理模块提供的。所以我们可以构建一个Session池,当由个人管理模块中的链接转到课程模块以及交易模块时,只需要传递一个SesionId或者用户信息中的主键,我们从Session池中取出用户信息。如果用户是通过在浏览器中输入URL的方式来访问课程模块或交易模块的,我们可以让个人管理模块提供一个类似QQ互联的登录页面,让个人管理模块在Session池中放入个人信息后,我们的课程模块或交易模块再根据个人管理模块返回的SessionID或用户信息的主键从Session池中取出用户信息。

这样,我们项目的耦合度就很小了,内聚更高。

这里需要注意的是,我们的不同模块分别部署在不同服务器上。如果都在一台服务器上,那么可用性会降低。

②数据库结构易于调整。

在没有划分模块之前,结构不清晰,表之间的连接很多,这样我们如果对数据库进行垂直切分,可能就会比较麻烦,代价很高。而如果我们划分了模块,垂直切分就比较容易了。比如,我们可以将Class表划分为Class_Member表,Class_video表以及Class表。这样我们的DAO层就比较容易好写,因为现在结构清晰了很多。

一个例子:

以前没有划分模块,我们就建立了数据库表,当我们开始写DAO的时候,写服务的时候,发现很难写。因为数据库表中某些列的值,通过","这一分隔符拼凑了很多数据。如Class表的Member字段,其值可能是"pshuyue@gmail.com,wd@163.com"。这样我们写服务的时候,就需要对这一列的值,进行处理。这些都是很麻烦的。于是后来我们将这张表进行了垂直切分,划分为上面提到的几张表,这样我们在写DAO以及服务时,感觉方便、简洁了好多。

幸好我们拆分的时候,表的结构并不复杂,表中数据也不多。但也做了不少工作:拆分表,建立序列、触发器,建立hibernate和表的关联,也是花了不少时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: