我认为要了解此问题,您需要了解什么是抽象。(我太懒了,找不到一个正式的定义,所以我敢肯定我会被迷住了,但是在这里...)抽象是当您采用一个复杂的主题或实体并隐藏其大部分细节时同时展示仍定义该对象本质的功能。
我相信这本书给你的例子是一所房子。如果仔细看一下房子,就会发现它是由木板,钉子,窗户,门组成的...但是,尽管旁边没有照片,但它的卡通图画仍然是房子。其中许多细节。
与软件相同。就像本书所建议的那样,无论何时进行编程,都需要将软件视为分层。一个给定的程序很容易超过一百层。在底部,您可能具有在CPU上运行的汇编指令,在更高级别上,这些指令可以组合在一起以形成磁盘I / O例程,在更高级别上,您不需要使用磁盘I /。直接使用O,因为您可以使用Windows功能简单地打开/读取/写入/查找/关闭文件。这些都是抽象,甚至在您获得自己的应用程序代码之前。
在您的代码中,抽象层继续。您可能具有较低级别的字符串/网络/数据操作例程。在更高级别上,您可以将这些例程组合到定义用户管理,UI层,数据库访问的子系统中。这些子系统的又一层可以合并到服务器组件中,这些服务器组件一起成为更大的企业系统的一部分。
这些抽象层中每一层的关键在于,每个抽象层都隐藏了上一层所暴露的细节,并提供了一个非常干净的界面,供下一层使用。要打开文件,您不必知道如何编写单个扇区或要处理的硬件中断。但是,如果您开始沿抽象层链向下移动,则肯定可以跟踪Write()函数调用,一直到发送给硬盘控制器的确切指令为止。
作者要告诉您的是,当您定义类或函数时,请考虑一下自己是哪一层。如果您有一个用于管理子系统和用户对象的类,则该类不应执行低级字符串操作,也不应该包含仅用于进行套接字调用的一堆变量。这将违反跨抽象层的行为,而且违反一种类/功能只能做一件事(SRP-单一责任原则)。