学习阿里Java开发手册笔记系列,参考版本1.0.0
在线阅读:https://img.hacpai.com/file/2017/1/eb0998bac7664496b2f1af98e07b08e5-Java.pdf
最新版本下载:http://click.aliyun.com/m/10355/
一、应用分层
依赖关系图。
开放接口层:可以直接封装Service接口暴露成RPC接口;通过Web封装成http接口;网关控制层等。
终端显示层:各个端的模板渲染并执行显示层。当前主要是velocity渲染,JS渲染,JSP渲染,移动端渲染等。
web层:主要是对访问控制进行转发,各类基本参数校验,或者不复用业务简单处理。
Service层:相对具体的业务逻辑服务层。
Manager层:通用业务处理层,有下列特征:
(1). 对第三方平台封装的层,预处理返回结果及转化异常信息。
(2). 对Service层通用能力的下沉,如缓存方案,中间件通用处理。
(3). 与DAO层交互,对DAO的业务通用能力的封装。
DAO层:访问数据库,与底层数据库进行交互。
外部接口或者第三方平台:其它部门或公司开放的接口、平台。
- 在DAO层,产生的异常类型很多,无法用细粒度异常进行catch,推荐使用
catch(Exception e)
方式,并且throw new DaoException(e)
,不必打印日志,Manger/Service层会处理。Service层出现异常,需记录日志到磁盘,并尽可能带上参数信息。web层必须处理异常,如导致页面无法正常渲染,直接跳转到友好的错误提示页面。开放接口层则要将异常处理成错误码和错误信息返回。 - 分层领域模型规约:
- DO(Data Object):与数据表结构一一对应,通过DAO层向上传递数据对象。
- DTO(Data Transfer Object):数据传输对象,Service/Manger层向外传递对象。
- BO(Business Object):业务对象,可由Service层输出的封装业务逻辑对象。
- QUERY:数据查询对象,各层接收上层的查询请求。
- VO(View Object):显示层对象,通常是web向模板渲染引擎层传输的对象。
二、二方库规约
- 第二方版本库命名方式:主版本号.次版本号.修订号。
- 主版本号:做了不兼容的API修改,或增加了能改变产品方向的功能。
- 次版本号:做了向下兼容的功能新增。
- 修订号:修复Bug,没有修改方法签名的功能增强。
- 线上应用不依赖SNAPSHOT版本(安全包除外);正式发布类库必须使用RELEASE版本号升级+1方式,且版本号不允许覆盖升级。
- 第二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用枚举类型或者包含枚举类型的POJO类。
- 依赖于一个第二方库时,必须定义一个统一的版本变量,避免版本号不一致。
- 禁止在子项目的pom依赖中出现相同的GroupID,相同的ArtifactID,但是不同的Version。
- 工具类有第二方库已经提供了的,自己尽量就表写了。
- 所有pom文件中的依赖声明放在
<dependencies>
块下,所有版本仲裁放在<dependencyManagement>
语句块中。 - 第二方库尽量不要再有\添加配置项。
三、服务器规约
- 高并发服务器建议调小TCP协议的time_wait超时时间,减少处于time_wait状态的连接。
- 主流操作系统采用与文件一样的方式管理TCP/UDP连接,所以调大服务器所支持的最大文件句柄数以增加服务器可建立连接数。
- 服务器内部重定向采用forward,外部重定向地址要使用URL Broker生成,以避免线上采用https协议导致浏览器提示不安全问题,以及URL维护不一致问题。
四、安全规约
- 可被用户直接访问的功能必须进行权限控制校验。
- 用户敏感数据禁止直接显示,比如手机号。
- 用户输入的SQL参数,必须严格使用参数绑定或者METADATA字段限制,以防SQL注入,不要拼接sql语句。
- 用户传入的任何参数必须做有效性验证。
- 禁止向HTML页面输出未经安全过滤的或正确转义的用户数据。
- 表单、AJAX提交必须执行CSRF安全过滤。
- URL外部重定向传入的目标地址必须执行白名单过滤。
- web应用必须正确配置Robots文件,非SEO URL必须配置为禁止爬虫访问。
- 使用平台资源如短信、邮件、电话……等时,必须实现防重放限制。如数量限制,疲劳度控制……