资源库(Repository)是对数据访问的一种业务抽象,使其具有业务意义。利用资源库抽象,就可以解耦领域层与外部资源,使领域层变得更为纯粹,能够脱离外部资源而单独存在。在设计资源库时,我们想到的不应该是数据库,而是作为“资源”的聚合对象在一个抽象的仓库中是如何管理的。于是,资源库可以代表任何可以获取资源的地方,而不仅限于数据库:
在《领域驱动设计实践-战略篇》课程中,我介绍了版本升级系统的先启过程。在这个系统中,后台需要与前台的基站(NodeB)以及基站的 BBU 板和 RRU 板进行通信,以获得这些终端设备的软件信息,如 Version、Configure、Software、Package、File 等。我在设计过程中引入了领域驱动设计,将获取的这些软件信息建模为领域模型对象,并根据其概念完整性等设计原则定义了聚合。要获得聚合,并非通过访问数据库,而是借由 TELNET 通信协议与前台设备通信,获得的信息以文件形式传输到后端,再由 FileReader 读取其内容后实例化对应的实体或值对象。当我们将这些软件信息建立的领域模型视为资源时,通信采用的 TELNET 协议,以及读取文件后的对象实例化都可以通过抽象的资源库隐藏起来,领域层就无需操心底层的繁琐细节了: