单个网站使用MVC架构模式经验总结,包含具体网站包分类、包内类的编写、注意事项等方面。本人认为,按照如下包分类及编写方法,已经满足一个简单普通网站(主要针对java)的编写需求。
MVC主要层级
- 数据库持久层(model)
常见应用的有Hibernate、Mybatis等持久层框架。
1. dao(repository)
此包中包含的类,是针对不同数据库的基本操作。
针对关系型数据库,是常见的CRUD(可能包含分页、模糊查询和排序等)操作,目前在JAVA EE中形成了JPA规范。
针对非关系型数据库,key-value。
一般对不同数据库类型,在dao包下建子包,例如:dao.jpa。
2. domain
针对关系型数据库,一般使用ORM映射技术,将数据库表格映射成Java类对象。
- 业务逻辑层(service)
调用dao中的方法,实现具体的业务逻辑。
1. domain.page
将数据库查询后得到的结果组合,生成页面需要的类型。对应的类放在domain.page包下。
- 控制层(controller)
这一层主要进行页面的互操作。接受页面传递数据,进行检验和处理,然后将参数传递给service。获取返回的结果,将对应的结果传递给页面。
1. controller
controller.screen,实现常用页面跳转,内部不包含具体业务逻辑,功能为根据url,跳转到页面。
controller,可以实现接口(Restapi),还可以实现对业务逻辑的调用。
其他
- 其他包:
1. config
用于一些配置类。
2. common
通用对象,记录全局变量、枚举类等。
3. utils
工具包,放置参数检查等工具方法。
- 接口方法实现策略:
//接口返回,必须注意,一般分为参数错误、异常返回、方法错误返回(null)、正确返回,四种方式。 //选择处理的方式(使用枚举,增加可读性): // 1. 使用错误码的方式,将错误信息与错误码关联(类HTTP)。 // 优点:将不同的异常方式归类,简单。 // 缺点:种类过多,错误码过多,不易识别。 // 2. 直接将错误信息,使用包装器的方式,返回上一层。 // 优点:简单直接。 // 缺点:不易于识别转换,如果错误信息是英文,不易转换成中文显示。 // 采用:错误码(主,向上传递)+错误信息(辅,日志显示)+包装器 public Object myApi(...){ //参数检验必不可少,注意尽量写成if分块的方式,防止出现多层 //if-else 嵌套,易于扩展。 if(check(param1)){ return error1; } if(check(param2)){ return error2; } ... ... try{ ... }catch(Exception e){ return errorException; } }