`
varsoft
  • 浏览: 2509805 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

[转]以数据库为中心的系统中的业务逻辑组织方式

阅读更多

作者:百度有啊实验室
来源:http://www.youalab.com/?p=458

前言

相信很多人都有类似的经历:随着业务越来越多, 系统的越来越复杂, 我们都会感觉我们的代码越来越难看, 重复代码越来越多, 越来越难以维护。 恩, 这确实是个问题, 但有没有可能解决的办法? 老实说, 确实很难, 但不是完全没有可能, 或者说有改善的可能。 最近就关于这方面进行了一些学习和考虑, 以纯理论的方式总结了一下, 希望能对对这方面有兴趣的同学有所帮助。

很多面向应用的系统是以数据为中心的, 在这些系统中, 以数据库存储数据; 业务逻辑代码则根据需求围绕着数据库中存储的数据来组织逻辑;以购买商品的系统为例, 商品数据, 交易数据和用户数据是系统中的核心数据, 绝大多数业务代码则是根据需求来倒腾这些数据。这个非常符合那个关于程序的定义: 程序 = 数据 + 行为; 在这里, 数据是数据库中的数据, 行为则对应业务逻辑。

对于所构建的系统, 我们自然希望可扩展性好, 可维护性;这是一个非常有挑战性对的事情, 大型的应用尤其如此; 能否真的做就在很大程度取决于逻辑的组织方式。 这篇文章大体介绍以数据库为中心的应用中的三个典型的业务逻辑组织方式。

逻辑组织方式

事务脚本方式

这里的事务与数据库术语事务有所区别, 这里的事务更多的指一次业务交互。

在应用系统中, 大多数业务逻辑可以看做一系列子任务的集合; 比如用户购买一个商品时, 可以大体分成几步:

  1. 先根据商品的信息到数据库中查询是否有可销售的商品存在;
  2. 有的话, 添加一个用户购买商品的购买记录;
  3. 然后把商品数量减少;
  4. 其他事情, 比如发邮件通知用户等。

以事务脚本方式组织代码时, 业务逻辑组织上没有层次之分, 在实现一个具体业务时, 根据其业务的需要从前到后进行一系列的事务调用; 就购买商品为例, 先从数据库中查询商品数量, 然后判断是否足够, 足够的话添加用户购买商品的记录, 然后操作数据库减少商品。这种方式有个明显的特点, 一个事务脚本实现以一个用例或者或者一个功能。这个方式优点很明显, 简单,直观, 易学易用,开发速度快;这些容易理解, 因为这些写代码的方式与直观的思维方式类似, 在实际中, 很多系统都是这样实现的;尤其那些快速开发系统; 但是抽象度低, 容易导致重复代码多,与其他系统的耦合程度高, 维护麻烦,尤其是对于复杂的系统来说。 举个例子来说,购买商品购买这个功能,桌面版提供了之后,手机版的也需要实现, 由于手机版与桌面版是两个不同的用例, 如果用事务脚本来组织代码的话, 很自然的就会出现类似的代码出现在了不同的地方的情况。 一个很明显的优化是封装成函数, 但是封装成函数这个事情的模块化程度低, 在业务复杂的情况下, 对业务逻辑的有效管理和维护是一个挑战。

事务脚本这种方式适用于相对简单的业务逻辑环境,而且在现实中, 很多业务本身就是简单的, 这种方式可以在开发高效, 运行高效的前提下工作的很好; 另外对于快速开发环境中也非常适用。 但是当业务逻辑复杂, 而且上线后维护期很长或维护量很大的系统来说,可能不是一种很好的方式。

表模块方式

在事务脚本方式当中,很容易导致:

  1. 相同或者类似的代码重复出现;
  2. 相关逻辑分布在多个地方。对于前一个问题, 可以通过把相同或者相似逻辑封装成函数来改进, 第二个问题通过流程或规范可以得到控制。 但是, 还是会在业务复杂的情况下对业务逻辑的有效管理和维护是一个挑战 因为缺乏一种有效的编码的机制来控制这样的问题。

表模块组织方可以从机制上提供一个相对好的解决办法, 其大概思路是,把与一个或者多个数据库表(或者视图)有关的逻辑组织成一个类, 把对与这个表有关的逻辑组织成这个类的方法。以上面那个购买商品为例, 查询商品是否足够可能是一个单独的方法, 修改商品数量是一个单独的方法;购买商品是一个方法,所完成的事情就是把前面两个方法组织起来。 一旦有了这个逻辑, 只要是需要用到购买商品逻辑的地方, 直接调用这个购买商品的方法就可以了; 除了这个购买商品之外, 其他与商品有关逻辑都组织在这个类里面,避免了与商品有关的逻辑分布到多个地方。

除了提供一个代码组织的方式外,这种组织方式还有一些其他的好处:不需要数据库表就直接可以测试,也便于打桩测试; 与很多数语言提供的数据库操作API配合使用方便, 很多数据库操作API返回的结果都市记录集的方式, 尤其以微软提供的相关API为典型代表, .NET提供的Dataset更是功能强大。实际上, 微软提供的开发平台倡导的就是以表模块方式组织逻辑, 并提供了各种便利的开发工具和API; 在管理代码的有效性和复杂度上有比较好的平衡,他比前面的事务脚本方式相对繁琐点, 比后面好提到的领域模型方式简单很多。

领域模型

领域模型方式组织代码就是OO的编程思想, 把领域逻辑对象化, 从而达到在复杂的业务逻辑是有好的可扩展性和可维护性。表模块组织方式在管理代码的有效性和复杂度上有比较好的平衡, 但是在其提供的抽象机制毕竟有限; 在管理复杂的业务逻辑方面有些不给力。比如, 对于不同类型的商品, 其购买逻辑可能不一样;这时候, 面向对编码的威力会就能比较好的发挥了, 商品这个例子中, 购买时的行为可能不一样, 利用多态机制, 对调用者来说可能是透明的。

领域模型这种方式与表模型的方式的区别在于OO的力度不一样; 表模型以表为单位来组织, 领域模型可能则以表里面的记录为单位来组织的, 因此代码中, 一个表只有一个类实例, 而领域模型则会针对一条记录有个对象。

模型这种方式的优点是便于有效的管理复杂性和可扩展性, 对于复杂的业务逻辑以及那种维护周期很长的系统来说比较适用; 但其缺点也很明: OO建模复杂,开发周期相对会长些;学习成本高, 尤其对于新团队来说; 同样, 如果代码组织不好, 也会出现其他方式中出现的类似问题, 如代码重复等。

小结

三种不同的逻辑组织方式各有特点, 适用于不同的场合, 可以根据实际情况选择, 一般来说, 简单应用, 要求快速开发快, 维护周期短的可以考虑事务脚本方式; 业务逻辑复杂, 维护周期长时, 在开发人员技能满足的条件下可以考虑领域模型; 在这个两个中间的情况可以考虑表模块方式, 尤其是在微软的平台上。 在实际中,由于实际业务的复杂性, 很多时候以一种单一的方式组织还不够, 可能几个方式综合起来运用。 比如, 把核心业务按领域对象的方式组织, 之上再以事务脚本来组织多变的应用业务。

来源:http://www.youalab.com/?p=458

分享到:
评论

相关推荐

    银行业务管理系统数据库设计1

    银行业务管理系统数据库设计是构建高效、稳定、安全的金融信息系统的关键步骤。这个系统涉及到多个核心实体,如部门、员工、客户、联系人、支行、账户和贷款,以及它们之间的复杂关系。下面我们将详细探讨这些实体和...

    数据库系统概论电子教案

    数据库是组织和存储数据的系统,它允许用户以结构化方式访问和管理信息。在数据库系统中,数据被组织成表格形式,每个表格称为关系,而这些关系通过键和外键相互关联。 2. 数据模型: 数据库设计的基础是数据模型...

    数据库模型:概念模型、逻辑模型、物理模型

    数据库模型是数据库设计的核心组成部分,它为数据组织和存储提供了理论框架。在数据库领域,主要存在三种模型:概念模型、逻辑模型和物理模型,每种模型都有其独特的用途和特点。 1. 概念模型(Conceptual Model)...

    数据库 报刊订阅系统

    【数据库 报刊订阅系统】是一个专为管理报刊订阅流程而设计的应用系统,它整合了数据存储、查询、更新和删除等核心功能,为用户提供高效、便捷的订阅服务。在数据库设计方面,这类系统通常涉及多个实体,如用户、...

    sap逻辑数据库sap逻辑数据库

    逻辑数据库是SAP系统中一种非常重要的数据抽象层,它提供了一种更加灵活和高效的方式来处理复杂的数据查询需求。 #### 二、逻辑数据库的结构与组成 ##### 1. 结构概述 逻辑数据库由多个组件构成,主要包括视图...

    数据库系统导论(第7版)中文

    数据库系统是信息技术领域中的核心部分,它负责存储、管理和检索数据,为各种应用程序提供支持。《数据库系统导论》作为一本经典教材,已经更新至第七版,并提供了中文版,这无疑为中国读者理解复杂的数据库概念提供...

    数据库设计,讲解业务实体对象到数据库表的映射关系。

    数据库设计是在软件工程和信息系统领域中一个重要的环节,它涉及到如何有效地组织数据以满足特定业务需求。良好的数据库设计不仅能确保数据的一致性和完整性,还能提高数据处理效率,为后续的应用开发提供坚实的基础...

    数据库开发管理系统平台

    3. **数据访问层**:这一层专门处理数据库操作,如查询、插入、更新和删除数据,隐藏了数据库的具体实现细节,使得业务逻辑层可以独立于特定的数据库管理系统。 在数据库开发过程中,这样的三层结构可以实现良好的...

    数据库系统需求分析报告

    业务逻辑的分解和描述则进一步细化了每个业务处理环节,通过自顶向下的方式,逐步明确每一步骤的输入、处理逻辑和输出,为后续的系统设计提供清晰的指引。 ### 用户平台要求 用户平台要求章节详细描述了软件运行所...

    数据库系统设计综合实验

    2. **系统架构**:描述应用的总体设计,如前后端分离、三层架构(UI层、业务逻辑层、数据访问层)等。 3. **数据库设计**:解释实体关系模型,包括各个表的设计、字段选择、键的定义以及可能的约束。 4. **程序实现*...

    数据库系统基本知识点整理.docx

    数据库系统是现代信息技术中不可或缺的一部分,它涉及到数据的组织、存储和管理,为各类应用提供高效、可靠的数据支持。本文将深入探讨数据、数据库、数据库系统和数据库管理系统的概念,以及使用数据库系统带来的...

    数据库 考勤管理系统

    5. 编程实现:编写前后端代码,实现数据交互和业务逻辑。 6. 测试与调试:进行功能测试和性能测试,修复问题,优化系统。 7. 文档编写:撰写系统设计报告,详细说明系统架构和技术实现。 六、管理系统特点 1. 实时...

    数据库系统原理实验五/大作业:数据库设计与应用开发大作业

    数据库设计是信息系统开发的核心环节,它涉及到数据的组织、存储和访问策略,旨在高效、安全地支持业务操作。本实验的目的是让学生深入理解和掌握数据库设计的基本方法和工具,包括概念结构设计、逻辑结构设计和物理...

    数据库建模的业务规则和方法

    数据库建模是IT行业中至关重要的一个环节,它在系统设计初期扮演着定义数据结构和业务逻辑的角色。在本文中,我们将深入探讨“数据库建模的业务规则和方法”,旨在为数据库设计提供一套全面且实用的指导原则。 首先...

    学生宿舍管理系统数据库设计案例

    总的来说,学生宿舍管理系统数据库设计案例详细展示了如何从需求出发,经过概念设计、逻辑设计和物理设计,构建出一个符合实际业务需求的高效数据库系统。这样的设计案例对于学习数据库设计理论和实践具有很高的参考...

    10个数据库管理系统 代码 报告

    这些系统提供了一种有效的方式来组织和操作大量信息,确保数据的安全性和一致性。在这个压缩包文件中,包含了一系列使用不同编程语言(如C++、MFC、C#、JAVA)实现的数据库管理系统的源代码和相关报告,涵盖了多种...

    数据库 仓库管理系统

    1. 后端开发:使用编程语言如Java、Python或C#构建仓库管理系统的后端,实现与数据库的交互,处理业务逻辑和数据操作。 2. 前端开发:前端界面使用HTML、CSS和JavaScript,为用户提供友好的交互体验。现代框架如...

    医院门诊管理系统数据库设计课程设计.doc

    处理逻辑是指系统中的业务逻辑和算法。处理逻辑可以是顺序逻辑、并发逻辑、循环逻辑等。在本系统中,处理逻辑包括病人信息的录入和查询、医生信息的录入和查询、药品信息的录入和查询等。 数据库结构设计 ---------...

    数据库资料数据库系统方面资料

    数据库不仅仅是一个存储数据的地方,它还是组织和管理数据的结构化方式。DBMS提供了数据的逻辑结构、存储结构、数据操作、数据控制和数据安全等功能。 数据库系统的核心概念包括: 1. 数据模型:数据模型是数据库...

    数据库系统概论期末复习2.doc

    数据库系统概论是计算机科学的重要组成部分,主要研究如何有效地组织、存储和管理数据。本复习资料涵盖了数据库系统的基础...在实际应用中,掌握这些知识有助于构建高效、稳定、可靠的数据库系统,满足各种业务需求。

Global site tag (gtag.js) - Google Analytics