文档

java体系技术文档


编程风格

<h1>编程风格</h1> <h2>1 接口定义常见问题</h2> <ol> <li>返回格式不统一。同一个接口,有时候返回数组,有时候返回单个;成功的时候返回对象,失败的时候返回错 误信息字符串。</li> <li>没有考虑失败情况。不返回任何数据或者只返回bool类型数据。</li> <li>出现和业务无关输入参数。</li> <li>出现复杂的参数。不允许出现例如json字符串这样的参数,这种参数可读性极差。应该定义对应的实体bean。</li> <li>没有返回该返回的数据。新增接口一般情况下应该返回新对象的id标识。 <h2>2 Controller规范</h2></li> <li>统一返回ResultBean对象。没有统一格式,AOP无法玩,更加重要的是前台代码很不好写。</li> <li>ResultBean不允许往后传。ResultBean是controller专用的,不允许往后传!往其他地方传之后,可读性立 马下降。</li> <li>Controller只做参数格式的转换,不允许把Json,map这类的对象传递到service中去,也不允许service返回 json、map这类数据。要定义实体bean。</li> <li>如无必要,尽量不要出现Request、Response这类对象。</li> <li>不要打印日志。日志在AOP里面会打印,而且我的建议是大部分日志在Services这层打印。 <h2>3 日志打印</h2></li> <li>日志打印最少要满足两个要求:是哪台机器打印的以及用户做了什么。</li> <li>是哪台机器打印可通过nginx配置来实现,在location中配置add_header。</li> <li>用户做了什么一般需要打印用户信息,可通过MDC类实现。</li> <li>其它要求:修改(新增)操作必须打印日志;条件分支必须打印条件值;重要参数必须打印;数据量大的时 候必须打印数据量大小。</li> <li>建议:不要依赖debug,要依赖日志分析;开发完之后不要着急提交,跑一遍看日志能否看懂。 <h2>4 异常处理</h2></li> <li>定义好异常处理,异常继承者RuntimeException。</li> <li>尽量少捕获异常,异常都抛到Controller层用Aop处理。</li> <li>少加空判断,加了空判断就要测试为空的场景。 <h2>5 工具类编写</h2> <h3>5.1 隐藏实现</h3> <ul> <li>定义自己的工具类,尽量不要在业务代码里面直接调用第三方的工具类,这也是解耦的体现。</li> <li>自定义工具类的好处有:1.避免不同的人使用不同的工具类库,造成混乱;2.将来需求变动要修改工具类的实 现逻辑,只需修改自定义的工具类即可,不用去每个调用的地方都做修改。既减少了工作量还降低了风险。</li> </ul></li> </ol> <h3>5.2 使用父类/接口</h3> <ul> <li>利用抽象的思想,修改参数类型。方法就是往上找接口/抽象类,一直到顶为止,然后把参数类型修改。这样 写出的方法更具通用性。 <h3>5.3 使用重载编写衍生函数组</h3></li> <li>编写多个重载函数,实际上的代码主体只有一份,但提供各种类型的形参,这样调用起来很方便。 <h3>5.4 使用静态引入</h3></li> <li>工具类的一个问题就是容易泛滥,主要原因是开发人员找不到自己要用的方法,就自己写一个,开发人员很难 记住类名,所以要让开发人员容易找到,我们可以使用静态引入。 <h3>5.5 物理上独立存放</h3></li> <li>把工具类代码放到独立的工程或者目录,在物理上要分开,专人维护。有助于保证代码的纯洁和质量。这样普 通的开发人员就不会随意修改。 <h2>6 函数编写</h2> <p>编写简单的函数是一件简单又困难的事情。简单是因为这没有什么技术难点,困难是因为这是一种思维习惯,很 难养成。</p> <h3>6.1 不要出现和业务无关的参数</h3> <h3>6.2 避免使用json/map这样复杂的对象作为参数和结果</h3> <h3>6.3 有明确的输入输出和方法名</h3> <h3>6.4 把可能变化的地方封装成函数</h3></li> <li>编写函数的总体指导思想是抽象和封装,你要把代码的逻辑抽象出来封装成为一个函数,以应对将来可能的变 化。以后代码逻辑有变更的时候,单独修改和测试这个函数即可。</li> <li>如何识别可能变的地方,多思考一下就知道了,工作久了就知道了。</li> <li>这一点非常重要,做好了这点,大部分的小的需求变更对程序员的伤害就会降到最低了!毕竟需求变更大部分 都是这些小逻辑的变更。 <h3>6.5 编写能测试的函数</h3> <h2>7 配置规范</h2> <h3>7.1 配置文件编码禁忌</h3></li> <li>读取配置的代码和业务代码耦合在一起</li> <li>开发初期就定义配置文件</li> <li>手工编写配置文件 <h3>7.2 重要思想</h3></li> <li>不要直接和配置文件发生关系,一定要有第三者(这里是配置的bean)。你可以说是中间件,中介都行。 否则, 一开始说用xml配置,后面说用json配置,再后面说配置放数据库。就会做很大的改动。 <h2>8 如何应对需求变更</h2> <p>正是因为需求变更不可避免,所以我们才更应该把代码写简单,以对付各种各样的需求变化。</p> <ol> <li>把代码写到最简单</li> <li>把可能变化的封装成函数</li> <li>先做确定的需求</li> <li>解耦 a) 解耦是编程里面重要的思想,解耦的关键在于:多引入“第三者”,不要直接发生关系。</li> <li>数据结构上要考虑扩展</li> <li> </li> </ol></li> </ul>

页面列表

ITEM_HTML