2024年5月1日发(作者:)
龙源期刊网
领域模型在订单管理系统开发中的应用研究
作者:周梦姝 杨杏 王小刚 殷振华
来源:《电子技术与软件工程》2016年第01期
面向特定领域模型的数据处理方法对于软件重用、软件可升级和软件开发效率的提高都有
重要的指导意义。论文首先分析领域模型内涵,提出了构造基于领域模型软件系统架构的一般
方法,进而结合订单管理系统的开发,介绍了领域模型的应用方法和处理流程。实践表明,基
于领域模型的系统开发方法能极大提高实际软件系统的开发效率。
【关键词】领域模型 事务脚本 表模块 表数据模型
1 前言
面向对象编程技术的出现改变了以数据为中心的传统软件开发方式。在数据模型的设计与
实践应用中,基于领域模型的数据设计方式逐渐成为主流。传统的数据处理模型主要采用行入
口、表入口数据层叠方式,即为数据表中的每一行设计一个对象,后续再采用对象方式进行数
据处理,对业务处理却没有特别关注。基于领域的设计模型,主要采用可视化方式表示领域内
的概念类或现实世界中的对象。领域模型又称为概念模型、领域对象模型或者分析对象模型,
它专注于分析问题领域本身,注重发掘重要的业务领域概念,并建立业务领域概念之间的关
系,可让软件开发人员和系统设计人员更加注重处理业务的表达,而不是重点关注数据的层叠
处理,从而极大地提高业务处理的效率。
2 领域模型
领域模型采用面向对象的开发方式处理数据,侧重业务模型的建立,使得系统的开发主要
围绕业务而非数据表,可使开发人员主要聚焦领域而非数据。基于领域模型开发软件系统时,
通常采用三层次的系统架构,这三个层次分别是数据访问层、领域层(业务逻辑层,系统真正
的核心)和表现层,其中,数据访问层负责与数据源进行通信,为上层应用提供数据支撑;领
域层(业务逻辑层)完成系统业务的组织、实现,是系统真正的核心;表现层负责实现用户界
面,提供更好的人机交互。
系统三层次架构如图1所示,层与层之间存在相互依赖的关系,表现层依赖领域层,领域
层依赖数据访问层。
系统三层次架构中领域层(业务逻辑层)是系统的核心,其逻辑组织方式主要采用事务脚
本、表模块和表数据模型这三种模式。
2.1 事务脚本
龙源期刊网
事务脚本模式将应用界面获取的数据直接存储到数据库中,或者直接从数据库中获取所需
数据并在用户界面中进行展示,这种数据访问模式可使软件开发人员快速掌握基于某种语言的
数据库访问技术和过程,因此,非常适合初学者学习和使用。
事务脚本模式处理领域业务时常用两种领域组织方式,一是将领域逻辑的设计放入存储过
程中,调用者通过执行存储过程即可获取或者维护数据;另一种方式是将领域逻辑的设计放入
应用界面中,再编写对应的结构化查询语句(SQL)实现数据的存取处理。使用存储过程方式
的缺点在于业务逻辑发生变化后,对应的存储过程必须相应地变化。此外,由于不同数据库产
品对SQL语句实现的差异会导致存储过程的语法不能通用。将业务逻辑包含在页面中也有其
固有的缺点,一旦业务发生变化,必须重新定义用户界面;此外,相同的业务逻辑可能应用于
多个界面,这样业务发生变化后则需要多次修改用户界面。尽管如此,事务脚本模式由于其简
单、直观,仍是初学者常用的领域层逻辑组织方式。
2.2 表模块
表模块模式以数据表为基础,每次以表为单位存取数据,以表为中心组织业务逻辑。目
前,大多数开发者都采用表模块模式,如在.NET平台中,DataSet,DataTable都采用以表为组
织结构的表模块实现方式;在大型的管理信息系统(MIS)中,借助于代码生成器(如
CodeSmith)可以快速生成一个应用系统的代码,开发效率非常高。
使用表模块模式开发系统时,主要围绕数据的增、删、改、查处理数据,业务逻辑组织往
往比较单一,业务被分派到不同的功能函数中,借助于事务调用不同的功能函数来完成整体的
业务逻辑。表模块模式的实现过程通常包括定义数据模型、定义数据访问类、定义业务逻辑类
和组织表现层数据等步骤。表模块的开发方式是过去几年的主流开发方式,并且有很多优秀的
开源库和工具可供使用。
2.3 表数据模型
表数据模型主要通过直观的可视化数据表,设计表间联系,实现业务逻辑,可让软件开发
人员和系统设计人员更加注重处理业务的表达,而不是重点关注数据的层叠处理,业务处理效
率非常高。以下订单管理系统分析领域模型的应用方法,实现领域模型驱动的数据处理。
3 订单管理系统
订单管理系统首先接受顾客提交的订单信息,然后查询商品库存,以获取商品的详细信
息,最后确定商品送货方案。订单管理系统的开发主要涉及数据库表的设计和基于领域模型的
业务逻辑处理。
3.1 数据库表
龙源期刊网
订单管理系统使用的数据库包括用户、订单、商品和订单详情四张表,表的结构和表间的
逻辑关系如图2所示。
3.2 领域模型
基于领域模型开发应用系统时通常分为业务建模、数据抽象、转换为实体、定义业务规范
和实现业务规范步骤。
3.2.1 业务建模
业务建模要求将系统的业务采用建模方式确定下来,以后的开发工作都围绕所建模型进
行,这样能有效控制需求和开发人员变化导致的开发风险。例如在订单管理系统中,为获取订
单中商品列表,相应的业务过程如图3所示。
3.2.2 数据抽象
数据抽象指根据业务流程,抽象出业务流程所涉及的业务实体,并将实体及其相互关系标
注出来。如在获取客户订单中商品明细处理中,经数据抽象得到的业务实体间逻辑关系如图4
所示。
在抽象出来的逻辑关系中,订单和订单详情是一对多的关系,订单详情和商品是多对多的
关系,顾客和订单是一对多的关系。
3.2.3 转换为实体
在抽取业务模型的基础上,还需将业务模型中的对象转换为实体。在转换过程中,需要使
用面向对象的方式组织对象之间的关系。获取客户订单中订单模型转换为实体的代码如下:
public class Order{
public string Id { get; set; }
public DateTime OrderDate { get; set; }
public decimal Total { get; set; }
/// 订单所属的用户
public virtual Customer Customer {get;set;}
/// 订单对应的明细列表
龙源期刊网
public virtual ICollection DetailList { get; set; }
}
3.2.4 定义业务规范
业务规范是领域模型中的核心,定义业务规范就是明确业务对象之间的关系和使用方式。
在定义业务规范的过程中,常借助于构建规约完成规范的创建。如在获取客户订单中商品明细
处理模块中,相应业务规范的定义如下:
public interface IOrderContract {
///根据登录用户获取跟用户的商品列表
IEnumerable GetOrderProductList(string customerId);}
public class OrderComponent: IOrderContract {IEnumerable
erProductList(string customerId){
//1.构建规约,按用户编号获取用户信息
//2.获取Customer的订单列表OrderList
//3.遍历OrderList中的DetailList
//4.遍历DetailList中的产品列表
//TODO:根据上述注释填写代码
}
}
从定义的业务规范中可以看出,获取ProductList的过程变成了几个相关对象的业务合并,
也就是说一个领域模块的完成是由多个子模块组合而成,而这些子模块又满足事务约定。
3.2.5 实现业务规范
在定义业务规范基础上,最后要实现业务规范。如在获取客户订单中商品明细处理模块
中,相应的业务规范实现如下:
龙源期刊网
public class OrderComponent : IOrderContract{IEnumerable
erProductList(string customerId){
//1.构建规约,按用户编号获取用户信息
//2.获取Customer的OrderList
//3.遍历OrderList中的DetailList
//4.遍历DetailList中的产品列表
//TODO:根据上述注释填写代码
var orders = (customerId).OrderList;
var details = ailList(orders);
return ductList(details);}
}
4 总结
本文在阐述领域模型设计原理与方法的基础上,结合订单管理系统的开发,介绍了领域模
型的应用方法和处理流程。应用实践表明,面向特定领域模型的数据处理方法对于软件重用、
软件可升级性和提高开发系列软件系统的效率都有重要的指导意义。
参考文献
[1] 吕有界.基于Modelica多领域建模仿真研究现状与思考[J].广州航海学院学报,2014
(02).
[2] 叶新,潘清,董正宏.多领域建模仿真方法综述[J].软件,2014(03).
[3] 丁宝宝,沈立炜,彭鑫,赵文耘.软件产品线领域模型与应用模型的通用同步演化方法
[J].小型微型计算机系统,2015(02).
[4] 黄洋,沈立炜,彭鑫.通用的软件产品线领域与应用特征模型演化同步框架[J]. 计算机
科学,2013(11).
龙源期刊网
[5] 余敦辉,何克清,李兵.基于模型聚类算法的领域问题本体构建[J].小型微型计算机系
统,2013(01).
作者简介
周梦姝(1995-),女,重庆市合川区人。现为常州信息职业技术学院软件学院助教。研
究方向为软件技术。
作者单位
1.常州信息职业技术学院软件学院 江苏省常州市 213164
2.苏州科大讯飞教育科技有限公司 江苏省苏州市 215002
发布评论