不同的层,不同的抽象
软件系统是分层组成的,其中较高层使用较低层提供的设施。在一个设计良好的系统中,每一层都提供与其上层和下层不同的抽象;如果你通过调用方法来跟踪一个单一的操作在各层中的上下移动,那么抽象会随着每个方法调用而改变。比如说:
在一个文件系统中,最上层实现了文件抽象。一个文件由一个可变长度的字节数组组成,它可以通过读写可变长度的字节范围来更新。文件系统中的下一层实现了固定大小的磁盘块在内存中的缓存;调用者可以假设经常使用的块会留在内存中,可以快速访问它们。最底层由设备驱动程序组成,它们在辅助存储设备和内存之间移动块。
在诸如 TCP 之类的网络传输协议中,最顶层提供的抽象是从一台机器可靠地传送到另一台机器的字节流。最顶层建立在一个较低的层次上,这一层会尽最大努力在机器之间传输有限大小的数据包:大多数数据包将被成功交付,但有些数据包可能会丢失或不按顺序交付。
如果系统包含具有相似抽象的相邻层,这是一个危险信号,表明类的分解存在问题。本章将讨论这种事情发生的情况、导致的问题以及如何重构以消除这些问题。
Last updated