
由于单一职责原则,这里把三个职责集中在一起,是不合适的. 三层架构:

三层架构依次调用

DAO并不总是从文件访问数据,还可能从数据库 网络访问.因此,会有很多DAO层. 我们一般会给所有DAO层提供同一的访问接口.即面向接口编程. service层一般也同理. 我们的架构变成了这样

其中,dao层提供统一的接口UserDao,而UserDaoImpl是一个实现类. tip:这里包名的命名impl 实现类的命名UserDaoImpl都是固定的规范. service同理

把
当中的代码抽取出来:




注意了,这里我们发现lines需要从dao中获取,因此我们需要有一个dao成员.这个成员类型应该是接口类型,这样可以利用多态. 最后:
