领域模型的定义
原文:http://www.objsql.com/2020/09/17/domain_model/
在应用系统中,“领域模型”是一个封装了数据(也可以称为“状态“)和逻辑的抽象概念(可以是一个Class,也可以是一个Interface)。在面向对象设计中有一个重要的概念:”尽可能使设计和代码符合相关领域中的概念、逻辑、以及关系“,也就是说“领域模型”的定义应遵循相关领域的定义(我习惯说:“我通过读代码的方法,就能理解某一业务所经历的过程,存在哪些变化”),只有在充分理解了相关领域的“知识”,在反复迭代中不断优化、重构。同样,随着时间和人员的变迁,能够让领域知识永久的停留在系统的代码和设计中,成为一个百科全书,当有人遗忘了最初的业务设计,能够能过代码和设计找回最初的业务设计。
Java 是一个极度抽象的设计,它遵循的是抽象世界或者是哲学意义上的定义,同样也描述了抽象世界里的事物的各种关系。它通过Class/Interface 定义抽象世界中的事物、动作、以及关系,通俗地讲,一个Class/Interface 可以是现实世界中的一个物理存在的事件或抽象事物,这些定义也就是所谓的“领域模型”。领域驱动设计其实是对面向对象理论的一种补充,更加具体的诠释了面向对象分析的方法,领域模型的设计方法,是面向对象设计方法的具体体现,本质上深入理解了面向对象的分析方法,也就不难理解“领域驱动”的设计。
ObjectiveSql 框架是一个封装应用系统和数据库之间交互的抽象模型,它应以数据库领域为基础,以数据在两个系统间的交换的逻辑进行设计,从Class定义、Class命名、以及交互过程的定义都应清晰反应出数据库和应用系统的交换特征。当然,它还承担了与应用系统间的交互,从这个角度去思考,ObjectiveSql 也是一个高度抽象的系统,它需要适应不同领域的应用系统的开发,因此,ObjectiveSql 也提出了较多抽象的概念,需要使用者尝试去理解,当然不理解也没有关系,缺省的实现已经满足了较多领域的应用系统,在后续的文章里我会系统的介绍如何通过ObjectiveSql 和代码和设计去理解应用系统和数据库之间的领域知识。
ObjectiveSql 中定义的@DomainModel 注解定义的模型是一种承载了领域数据和逻辑的独立个体,它通常是相关领域中需要持久化的领域对象,ObjectiveSql 自动赋予了领域对象常用的数据库访问能力,而开发者只需要关注自身的领域逻辑,无需关心数据库访问的相关知识,同时,ObjectiveSql 以数据库访问协议SQL 为领域背景,以面向对象的分析方法进行抽象,建立了以数据库领域为基础的“领域模型”,通过理解这些“领域模型”,开发者可以清晰的解读数据库的特性和逻辑。
其实,所有的软件设计方法或者方法论都是以事实为基础,以解决前人所产生的错误为方法进行总结、归纳的,面向对象设计的出现是为了解决“过程化”编程中状态不受保护,不能被有效的防御,Java 的出现是为了解决C++中内存管理和多重继承导致的复杂度,而ObjectiveSql 的出现是为了解决重复编码和SQL 与Java 无法有机结合的问题,使开发者忽略技术底层的特性,将更多的精力投放到应用系统的设计和开发。
版权声明: 本文为 InfoQ 作者【Braisdom】的原创文章。
原文链接:【http://xie.infoq.cn/article/54141f22f15ea64143402aa7c】。文章转载请联系作者。
评论