定义了系统核心的接口之后,基于功能分割和方便复用的原则,再对系统进一步进行划分。这里基于包名划分模块,这也是在Java中比较常见的做法。
也许你会觉得为如此简单的一个系统(或许根本就不该称之为系统)划分模块有点小题大做了,有经验的程序员根本不需要多少设计就能快速完成这样的一个注册功能。不过本书的目的不在这个功能本身,我们需要一个像模像样的、有很多模块的系统来演示Maven很多非常酷的特性,同时,又不想引入一个拥有成千上万行代码的过于庞大的系统。账户注册服务的模块划分如图4-4所示。
图4-4 注册账户服务包图
现在逐个解释一下各个模块(包)的作用:
·com.juvenxu.mvnbook.account.service:系统的核心,它封装了所有下层细节,对外暴露简单的接口。这实际上是一个Facade模式,了解设计模式的读者应该能马上理解。
·com.juvenxu.mvnbook.account.web:顾名思义,该模块包含所有与web相关的内容,包括可能的JSP、Servlet、web.xml等,它直接依赖于com.juvenxu.mvnbook.account.service模块,使用其提供的服务。
·com.juvenxu.mvnbook.account.persist:处理账户信息的持久化,包括增、删、改、查等,根据实现,可以基于数据库或者文件。
·com.juvenxu.mvnbook.account.captcha:处理验证码的key生成、图片生成以及验证等,这里需要第三方的类库来帮助实现这些功能。
·com.juvenxu.mvnbook.account.email:处理邮件服务的配置、激活邮件的编写和发送等工作。