这周我参加了odd-e的现代网页开发的培训,这次培训对我而言有很大的影响。感觉像是帮我打通了奇经八脉,解决了我很多困惑已久的问题。所以趁此机会做个记录,避免时间久了就会忘掉很多事情。

第一天

这次课程我们是实操+回顾的方式进行的。在大家环境都配置好了之后,我们开始进入了正题,首先老师提出了一个需求(做一个添加记账记录的功能),老师解释了需求之后让我们开始讨论拿到这样的一个需求应该如何开始着手。

按照我们以往的开发方式,我们都是先分析需求,然后开始着手设计数据库。我按照我以往的经验给出了这个答案。

开发流程的理解

这个时候老师开始帮我们分析开发这件事到底应该从哪里开始着手,我觉得是应该从 db -> logic -> ui 这种方向去进行开发。但是这样是高效的开发方式吗? 通常我之间的开发方式都是设计完数据库之后开始写代码,然后在写代码的过程中遇到一些问题可能需要修改数据库,然后就会根据逻辑的调整频繁的进行修改数据库的设计,这个过程中其实是浪费掉了很多时间的。

aha moment: 如果我们先开始写logic,之后再处理ui. 最后处理db的话,这样我们就可以关注我们的业务,而不是受原有的数据库设计的拖累,至于最后的数据库建表相关的操作我们可以通过or mapping框架进行处理。 这样的话对我们的项目进行更有帮助。

单元测试

在我们写完第一个功能的逻辑之后,老师让我们根据自己的理解写出单元测试。我这个时候写出了一个我自己理解的单元测试,集成了spring环境的单元测试,而且因为我是给controller写单元测试,依赖了一些Spring Mvc中的与页面进行交互的类Model,最后我的单元测试因为model的问题没有办法进行下去。在回顾阶段老师看了我的代码,给出的结论就是,这个并不是一个单元测试,而更像是一个集成测试。因为我的测试中依赖了太多外部因素。

aha moment: 单元测试仅需要测试自己单元的逻辑,而不需要依赖其他外部因素(spring容器,数据库,网络,第三方服务)

而且单元测试是针对与方法中的逻辑点,这个才是单元测试的粒度,以我的controller中的findlist方法来说,可能测试的逻辑点就包括 return viewname | model.setAttribute行为 和 service这三个点。

如何屏蔽外部细节:Mock框架,我们可以利用mock的方式模拟出第三方的依赖,和一些第三方的行为。 stub : 对状态进行测试 mock:对行为进行测试。

单元测试的好处

自动化 频繁运行 快 表达力强 独立 重复 可读 推断出更好的设计
单元测试的好处

如何写单元测试

三段式 given when then

代码提交

checkin dance(五步提交法):测试 - coding - 测试 - check out - 测试 - 提交

第二天

code smell

重构

service

domain