《架构整洁之道》之展示器和谦卑对象

一、谦卑对象模式

谦卑对象模式最初的设计目的是帮助单元测试的编写者区分容易测试的行为与难以测试的行为,并将它们隔离。其设计思路非常简单,就是将这两类行为拆分成两组模块或类。其中一组模块被称为谦卑组,包含了系统中所有难以测试的行为,而这些行为已经被简化到不能再简化了。另一组则包含了所有不属于谦卑对象的行为。

二、展示器与视图

视图部分属于难以测试的谦卑对象。这种对象的代码通常应该越简单越好,它只应负责将数据填充到GUI上,而不应该对数据进行任何处理。

展示器则是可测试的对象。展示器的工作是负责从应用程序中接收数据,然后按视图的需要将这些数据格式化,以便视图将其呈现在屏幕上。

三、测试与架构

强大的可测试性是一个架构的设计是否优秀的显著衡量标准之一。谦卑对象模式就是这方面的一个非常好的例子。我们将系统行为分割成可测试和不可测试两部分的过程常常就也定义了系统的架构边界。展示器与视图之间的边界只是多种架构边界中的一种,另外还有许多其他边界。

四、数据库网关

对于用例交互器与数据库中间的组件,我们通常称之为数据库网关。这些数据库网关本身是一个多态接口,包含了应用程序在数据库上所要执行的创建、读取、更新、删除等所有操作。

另外,我们之前说过,SQL不应该出现在用例层的代码中,所以这部分的功能就需要通过网关接口来提供,而这些接口的实现则要由数据库层的类来负责。显然,这些实现也应该都属于谦卑对象,它们应该只利用SQL或其他数据库提供的接口来访问所需要的数据。与之相反,交互器则不属于谦卑对象,因为它们封装的是特定应用场景下的业务逻辑。

五、数据映射器

对象关系映射器事实上是压根就不存在的。道理很简单,对象不是数据结构。至少从用户的角度来说,对象内部的数据应该都是私有的,不可见的,用户在通常情况下只能看到对象的公有函数。因此从用户角度来说,对象是一些操作的集合,而不是简单的数据结构体。

与之相反,数据结构体则是一组公开的数据变量,其中不包含任何行为信息。所以ORM更应该被称为”数据映射器”,因为它们只是将数据从关系型数据库加载到了对应的数据结构中。

六、服务监听器

我们的应用程序会将数据加载到简单的数据结构中,并将这些数据结构跨边界传输给那些能够将其格式化并传递其他外部服务的模块。在输入端,服务监听器会负责从服务接口中接收数据,并将其格式化成该应用程序易用的格式。

文章目录
  1. 1. 一、谦卑对象模式
  2. 2. 二、展示器与视图
  3. 3. 三、测试与架构
  4. 4. 四、数据库网关
  5. 5. 五、数据映射器
  6. 6. 六、服务监听器