File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 20180706 代码契约 V0.1 Beta
2
+
3
+ -----
4
+
5
+ ### 1. Spring 依赖注入
6
+ - ** 结论** :绝大部分情况下只使用 Constructor DI,不使用 Field DI
7
+ - ** 注意事项** :
8
+ - 使用 Constructor DI时,不用在构造方法上加 @Autowired 注解,且只能有一个 Constructor,即只包含要注入的那些参数的构造函数
9
+ - It’s fine to use field based injection in tests when you’re using the SpringJUnit4ClassRunner.
10
+ - ** 主要原因** :
11
+ - 如果使用 Field DI,对于IOC容器以外的环境,除了使用反射来提供它需要的依赖之外,无法复用该实现类。而且将一直是个潜在的隐患,因为你不调用将一直无法发现 NullPointerException 的存在。
12
+ - 上文注意事项中提到的 SpringJUnit4ClassRunner 类配合 @Runwith 注解可以让测试在 Spring 容器环境下执行,不会出现标注了 Field DI 的字段未注入的情况。
13
+ - ** 支撑文章** :[ Why field injection is evil] ( http://olivergierke.de/2013/11/why-field-injection-is-evil/ )
14
+
15
+ ### 2. 路由 Router文件
16
+ - ** 结论** :为保证对外服务的统一管理,将具体的路由信息写在一个统一的文件中,而不是将其拆散写在控制器的每个方法声明头上
17
+
18
+ ### 3. Restful Or Not
19
+ - ** 结论** :
20
+ - 拒绝Restful
21
+ - 应用运行的状态码由开发人员自己制定和维护
22
+ - HTTP 动词使用 GET、POST、DELETE
23
+ - ** 主要思路** :HTTP Code 用于区分网络问题和业务问题,自定义 Code 用于处理业务问题,不要使用 HTTP Code 去反映业务的运行情况,一方面其容量有限,另一方面使用其的学习成本也不低。Restful 风格的 API 虽然流行,但是要有自己的思考,其更适用于简单的场景。而商业系统开发往往是复杂的,不要开始就想着去简化,而应该从后期的管理上深入、想办法。
24
+
25
+ ### 4. 接口与实现类命名风格
26
+ - ** 结论**
27
+ - 接口名称前不加附属的字母(如接口前加 I),
28
+ - 实现类后不加附属的无意义单词(如 Impl)
29
+ - 实现类名相较于接口名后面可加有意义的单词,如Db
30
+
31
+ ### 5. Pimitive Type or Wrapper Class
32
+ - ** 结论** :
33
+ - 若该字段可以不初始化,使用 Wrapper Class
34
+ - 若该字段必须被初始化,使用 Primitive Class
35
+ - ** 举例** :
36
+ - Employee类中的corpId
37
+ - 如果员工定义时可以不指定所属公司,则用Integer
38
+ - 若定义员工时必须定义公司,则用int
39
+
40
+ ### 6. 实体类字段不赋默认值
41
+
42
+ ### 7. 方法(Method)风格
43
+ - ** 结论** :过长代码要抽成方法
44
+
45
+ ### 8. 异常的处理
46
+ - ** 结论** :开发应用时,使用两种异常
47
+ - Java 定义的标准异常,如参数检查中发现 null 参数
48
+ - 业务相关自定义异常:如密码过长或过短
49
+ - 自定义异常应继承自 RuntimeException,因为它是 Unchecked Exception
50
+ - 使用异常类型而非异常信息来分辨异常来自的不同 Domain 类
51
+ - ** 注意** :以上两个例子即使和你的业务契合,也不一定满足和你的业务要求
52
+
53
+ ### 9. LOG的等级划分 => 后面提供要求文档(刘博)
54
+ - ** 结论** :
55
+ - 不要求进出都写,非常短小的的方法不用写,只要能追踪主要参数即可
56
+ - 数据量太大时打印变量用Trace,数据量小用Info
57
+
You can’t perform that action at this time.
0 commit comments