图图 1-2、广义的认知分解过程、广义的认知分解过程
(注意!凡是不特别说明,下文中所有“数据”一词都指需要持久化的数据,而不包括内存中的临时数据。请各位留心。)
如图1-2所示,广义的认知分解应该是这样的:软件产品都是在某个领域内实现某些特定业务,所以,软件产品天生应该分解
为界面交互部分和业务逻辑部分,其中业务逻辑部分是软件产品的核心,它客观存在于软件产品内部,但是无法对使用者产生
直观刺激,因此业务逻辑不能与使用者直接交互。而界面交互部分是业务逻辑与使用者进行交流的接口,使用者通过界面交互
部分,与业务进行交流,从而使得软件产品发挥其作用。
而在具体实现系统时,界面交互部分演化成表示层,业务逻辑部分演化成业务逻辑层。所以,可以认为,数据访问层不是软件
产品自然演化的直接产物,之所以出现数据访问层,是因为某些产品的业务属于“数据操作集中型”业务,为了实现隔离、复用
等目的,架构师从业务逻辑中分离出了频繁使用的数据访问业务,形成了单独的数据访问层。从广义来说,可以认为数据访问
隶属于业务逻辑,因为,数据访问操作实际上也是业务逻辑的一部分。
总结一下几个要点:(这几个要中的业务逻辑均指广义业务逻辑)
1)软件产品自然的可分为界面交互部分和业务逻辑部分。
2)从空间结构上看,业务逻辑和数据访问不是并列关系,而是隶属关系——数据访问隶属于业务逻辑。虽然在具体系统实现
层面,数据访问层和业务逻辑层是并列存在,但从概念本质层面上分析,两者是隶属关系。
3)从时间结构上看,应该是先有业务逻辑的概念,才有数据访问的概念。业务逻辑衍生自软件本身,数据访问衍生自业务逻
辑。
4)因为业务逻辑是软件产品自然的一部分,所以拥有业务逻辑是软件产品的必要条件(读者可以试着举出一个不包含业务逻
辑的软件)。但是一个软件可以没有数据访问,如“计算器”、“不带存档的小游戏”等。
利用以上论述要点和认知分解,朋友们可以试试在脑中重新构筑狭义和广义“业务逻辑”的概念。看能不能把我们丢掉的业务逻
辑概念找回来。关于业务逻辑更多的细节,将在下文中讨论。
2、细说业务逻辑、细说业务逻辑
2.1、业务逻辑到底是什么、业务逻辑到底是什么
在第一大节里说了那么多,相信各位基本已经形成“业务逻辑”的概念了。如果我在这里再啰嗦什么,我不嫌累各位也要嫌烦
了。所以,这里我仅给出两个定义。
广义上的义务逻辑——软件本身固有的一种品性,自然存在于软件产品内部,是软件具有的在某个业务领域内的逻辑,是软件
的核心和灵魂。软件产品除界面和交互外的一切都可看作是广义业务逻辑。
狭义上的业务逻辑——等同于分层架构中“业务逻辑层”的职责,是软件中处理与业务相关任务的部分,一般狭义上的业务逻辑
不包含数据持久化,而只关注领域内的相关业务。
对于以上两种定义,希望朋友们不要割裂开来看,而 要辩证统一的去看,这样,才能构建一个完整而辩证统一的“业务逻辑”概
念。在下文中,将不再明确区分狭义和广义,“业务逻辑”一词将代表两者的辩证统一体。
2.2、业务逻辑的组成结构、业务逻辑的组成结构
业务逻辑作为一个高层次概念,其内在结构也是非常丰富的,下面我们深入其里,去探寻一下业务逻辑都是由哪些更底层的部
分构成的。
2.2.1、领域实体(、领域实体(Domain Entity))