我喜欢分层的原因是:分层可以将底层操作包装,使你在任何一层工作时,可以只考虑下面的一层,而无需考虑更下面的所有层的细节,甚至是一共有多少层。这是一个抽象的机制,这是一个名字的集合,你会使用”GetAllUsers"而不是"select * from users order by id"来思考问题,你会使用"获取购物清单”而不是“拿到一张写满了我所买商品以及他们价钱的列表”,如果没有分层可能你在写代码的时候还要考虑某个电子是如何将内存中的一个二进制位设置成“1"。 我曾经遇到过一个系统,这个系统很小,大概也就几千行代码,它使用VB来访问一个.ini的配置文件、一个数据库和一个execl模版。它的主要功能就是根据.ini的配置信息,从数据库中获取某些数据,放到模版的某个cell中。代码虽短但是非常难懂,它每执行一个操作都要调用几乎相同的3-5行代码来读取.ini文件,这些代码唯一不同的地方就是要读取的键值,以及返回结果的类型(强制类型转换)。看到这里大家应该很容易看出来,只要提取一个函数就行了。是的,仅仅是提取一个函数,就使得代码的清晰程度大幅增加,同时减少了重复代码。这个函数其实就是一个“数据访问层”,它将对.ini文件的访问细节包装起来,任何使用它的代码都无需知道实现细节,只要知道调用这个“GetValueFromConfig(key)”就可以得到自己想要的东西。这样,你就摆脱了每次考虑如何访问配置文件的细节,可以专注于更高层的逻辑了。这里顺便说一下,很多人认为“数据访问层”的作用是可以替换数据库,实际上这种情况在框架以外的程序中并不经常发生。在应用程序中,将对数据的访问抽象出来才是更常见的动机。