要做一个好的开发框架并不是直接找一个现成的Spring就ok了,这个对于一般新手来说学习难度还是有点高。另外Spring还是一个通用性的框架,我们需要针对业务的定制化封装。我以java为例讲解一下后端需要做什么:
- 确定层数结构
- parent
- common
- test
- dao
- service-common
- service
- web-common
- web
- parent
- parent统一引入的类库及版本,通过maven方式进行类库管理,在parent中定义所有引入的类库及版本,不需要其他人私自引入类库。java类库的膨胀及冲突控制的确是一项很头疼的事情,一不小心最终的项目就达到几百兆,每次编译发布就需要很长时间。我在这里强烈推荐一下一个国内开源框架nutz,无引入其他任何jar包,提供了spring和hibernate的最常用功能,只有1M。我们之前使用Spring,后来换成nutz,而且严格限制引入的jar包后,web最终打完包,才10M左右。
- common工具类确定及封装,不要引入过多的包,只引入最基础而且是最必须的工具类。比较极端的情况下,自己写。
- StringUtils,DateUtils等,这个引入common-lang
- 语法糖,比如 map,list等的泛型构造,isEmpty(Object ) length(Object)等
- JodaTime,谁用谁知道
- guava,缓存,限制流量
- log,java的日志是一大堆,建议slf4j+logback,其他的都桥接到这上面。
- Exception,定义异常接口 ISystemException,IBusinessException,IAuthException,及几个实现类,这个会单独起一个异常章节进行讲解。
- Ioc,这个一般你使用的框架已经提供了。
- Aop,这个一般你使用的框架已经提供了。
- test 单元测试,集成测试的辅助类封装,让写单元测试跟玩一样,否则没有人愿意写的。
- IOC容器,Spring上下文及测试类封装
- 通用的Mock类
- dao 对于db或者hbase,mongodb等一系列存储的封装,当然如果有必要还可以拆分。我针对db先说一下,其他的先不说:
- 全局唯一主键生成算法
- 主备库,多数据源
- 统一的IdEntity,IAuthorEntity(带修改人,修改时间记录的),所有数据库实体都继承自他2个
- 针对统一类的泛型增删改查封装
- 扩展自定义的标注,比如@Column @MyId等等用于实现自己特殊的逻辑
- 数据级别的权限控制
- 数据库事务,这个一般你使用的框架已经提供了。
- service-common,封装业务逻辑所需要的工具类或基础类,如果没有多少,可以和service合并。
- service真正的业务逻辑,根据不同的业务及规模可以进一步拆分service-a,service-b
- web-common,封装于界面及mvc相关,filter等等的逻辑
- mvc,url-mapping 这个一般框架已经提供,比如spring,nutz都会有。
- 异常处理,后面会单独写
- 单点登录filter,其他统一的filter
- 访问权限控制
- 不同后缀的处理,json,html,json及jsonp的封装
- 动静分离,静态文件使用nginx进行加载,设置缓存时间等等
- 界面统一的变量封装,比如根路径,user
- 用户获取
做完这些,后端的基本封装才算稍微有一个样子。