加载中...
规格模式把业务规则封装成可组合的独立对象,每个规格判断某个对象是否满足特定条件。多个规格可通过与、或、非进行组合,从而灵活构建复杂的选择、验证和查询逻辑,是领域驱动设计中的常用模式。

| 中文名 | 规格模式 |
| 英文名 | Specification Pattern |
| 提出背景 | 领域驱动设计 |
| 核心方法 | 判定是否满足 |
| 组合方式 | 与、或、非 |
规格模式(Specification Pattern)是一种设计模式,它把一条业务规则封装为独立的规格对象,该对象暴露一个判定方法用于检验某个候选对象是否满足这条规则。多个规格可以通过逻辑与、或、非等操作组合成更复杂的复合规格。
规格模式由 Eric Evans 和 Martin Fowler 在领域驱动设计相关著作中系统阐述。它的价值在于把散落在各处的业务判断条件集中化、对象化,使规则可命名、可复用、可测试,并能像积木一样自由拼装。规格常被用于选择满足条件的候选、验证对象合法性,以及描述待创建对象应满足的要求。
常见场景包括:根据复杂条件从集合中筛选对象;订单、用户等实体的业务合法性校验;把内存中的判定规则翻译成数据库查询条件以提升效率;以及在配置化系统中动态组合准入规则。它在需要频繁变化和组合业务规则的领域尤为有用。
问:规格模式和直接写 if 判断相比有什么优势?答:它把规则提炼为具名对象,便于复用、组合和单元测试,避免相同判断在代码各处重复,也让业务规则更贴近领域语言。
问:规格模式会不会导致类数量膨胀?答:会。为每条规则都建一个类可能增加类的数量,对简单且一次性的判断反而繁琐,应在规则复杂、需组合复用时才采用。

| 中文名 | 规格模式 |
| 英文名 | Specification Pattern |
| 提出背景 | 领域驱动设计 |
| 核心方法 | 判定是否满足 |
| 组合方式 | 与、或、非 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧