APP下载

基于领域驱动设计的车间详细排产系统研究

2011-10-12李万高孙德厂胡耀东

制造业自动化 2011年23期
关键词:车间对象驱动

李万高,孙德厂,胡耀东

LI Wan-gao1, SUN De-chang2,3, HU Yao-dong1

(1.河南工程学院,郑州 451191;2.中国科学院 沈阳自动化研究所,沈阳 110016;3.中国科学院 研究生院,北京 100049)

0 引言

所有的企业应用软件系统都是为了支持具体的企业管理与运作流程,总是与相关的业务领域密切相关。然而传统的以数据存储与功能实现为中心的软件设计方法导致业务领域与软件设计、开发脱节,常常导致设计、开发偏离用户需求。同时大量的业务规则、数据验证夹杂在业务对象的处理之中,业务逻辑的处理嵌入到用户界面组件和数据库脚本中,导致软件的可维护性、可扩展性不足。领域驱动设计的开发方法弥补了这一缺陷,在统一开发过程的框架下,领域模型贯穿整个软件开发周期。

1 领域驱动设计

领域驱动设计(DDD)是Eric Evans在2004年提出的概念,是一种基于模型驱动开发(Model Driven Development MDD)思想的开发方式[1]。这种方法的核心观点认为软件项目的起点是领域,针对领域建立符合系统需求的模型是软件设计的基础,是业务领域专家、分析系统分析师、架构设计师、开发人员共同交流的平台。在软件开发阶段,推荐使用敏捷编程方法,使分析、设计、开发各环节相互反馈、促进,并对系统进行持续的重构,形成良性循环,有助于软件在满足需求的条件下,最真实的映射领域业务逻辑,这是瀑布模型的方法所不具备。图1是领域驱动设计与开发模式的展示。

图1 领域驱动设计与开发模式

领域驱动设计的核心是对业务领域建模,对象建模和基本要素包括:分层架构、实体、值对象、服务、模块、聚合、工厂和资源库[2]。对领域驱动设计的研究工作,一些作者已经做出了努力。王鹏等[3]使用领域驱动设计的开发模式设计了基于WEB的船舶性能预报系统,完成了该系统的分层架构设计和业务领域建模。陈亮[4]结合动态表单设计示例,对领域驱动模型进行了介绍。张金松[5]针对物流系统,提出了一个领域驱动设计的实施方案:DDD+SCRUM+XP(Extreme Programming)+CI(Continuous Integration)。系统架构采用轻量级的J2EE技术(Spring+Hibernate+Compass+Ajax)。丁涛[6]对领域驱动设计的基础理论与技术进行全面的介绍,包括领域工程、领域建模等, 并对航务海事系统进行领域建模、架构设计与系统实现。郑琴琴[7]对业务逻辑组织方法,史栋杰等[8]对资源库模式设计进行了研究。

2 车间详细排产领域模型

车间详细排产是指在一定的计划期内为加工任务分配制造资源的过程[9]。计划期指排产所涉及的时间范围,企业一般采用滚动周期的方法。加工任务指上层计划系统给制造车间下达的已经分解好的生产订单,标明有详细的加工对象、加工数量、交付时间、工艺路线、加工工序等信息。制造资源指车间所拥有的设备、人员以及制造资源的能力。

2.1 领域知识

依据上述概念,要实现车间详细排产必须对基础数据进行管理,这些基础数据包括工作日历、人员班组、设备工具、工艺路线、工序、物料和物料清单。为达到详细排产的优化目标,要遵循相关的生产规则、满足生产约束;为满足交付时间要求必须选择合适的计划策略,选择适合特定环境的算法;最后对排产的结果进行评价,并发布执行。经过对这些要素的迭代分析,车间详细排产领域知识如图2所示。

图2 车间详细排产领域知识

2.2 业务模型

2.2.1 业务流程

车间详细排产业务流程主要包括基础数据管理和排产执行。基础数据管理主要包括基础数据维护,以及基础数据之间关系分配,从而建立起模拟实际生产环境的详细排产模型。排产执行主要包括加工任务加载、排产执行、排产结果调整、排产结果发布、执行过结果反馈。排产执行流程如图3所示。

基础数据:增加、修订、删除、查询基础数据信息,确保基础数据完整、正确、及时的维护在系统中。

数据分配:增加、修订、删除、查询基础数据分配关系,建立基础数据之间的业务规则,切实反映各排产要素之间的制约关系。

加工任务:在排产系统中建立加工任务,或从上层ERP系统下载加工任务。

排产运算:在基础数据基础上,选择排产策略、目标,提交排产事务,系统根据基础数据建立排产环境模型,调用合适的算法,输出排产结果,并对排产结果评价。

结果发布:根据甘特图、负载图、评价指标对排产结果审查,根据人工经验对排产结果进行调整或优化直至满意,发布排产结果。

执行反馈:根据实际生产开、完工时间,生产进度的反馈数据,不断更新加工任务的状态,从而形成生产过程排产的闭环控制。

图3 车间详细排产执行流程

2.2.2 领域模型

设计完整的企业级应用软件,在满足业务领域和业务流程的功能性要求外,还应该包括用户管理、权限管理、日志管理等非功能性要求以及运算速度等性能要求。在此基础上构建领域模型如图4。

实体:模型中日历时间、设备工具、人员班组、加工工序、工艺路线、生产产品、加工任务均具有唯一的标识,这些对象均是实体对象。

图4 车间详细排产领域模型

值对象:模型中生产能力、计划目标、计划结果等对象,随系统运行而变化,不具有标识符,是值对象。

服务:模型中的数据检查、能力核查、数据加载、模型构建、算法调用、结果发布等均为系统的服务。

模块:系统中实体对象的维护,以及实体对象之间关系的分配,是详细排产的基础数据,可以划分为基础数据管理模块。加工任务、排产运算、结果发布、执行反馈是动态的数据,划分为系统执行管理模块。用户、权限、日志的管理划分为系统管理模块。

聚合:对于实体对象,拥有唯一的标识,可以作为聚合根,进而形成聚合体,在模型中,人员班组、设备工具、工艺路线、生产产品、加工任务作为子模型。其中加工任务和设备工具作为领域的核心,因为排产的结果就是要把加工任务分配到不同的设备工具上进行加工。

工厂:在业务处理中,像工艺路线、加工任务这样的聚合体或者生产能力、排产模型这样的值对象,往往包含有复杂的数据及对象分配关系,为便于实现,需要建立构造函数对其进行数据初始化,这就是工厂。

资源库:为提升系统的计算性能,排产运算必须基于内存运行,需要按照排产执行流程将持久化数据加载到内存中。为使不同数据在内存中可以区别开来,需要为复杂的实例化实体对象或值对象创建资源库,而简单的数据使用变量进行存储。

3 车间详细排产系统架构设计

通过上述领域模型的分析,可以对系统进行架构设计,通用的领域驱动设计的架构性解决方案是将软件设计为四层:用户界面层、应用层、领域层和基础设施层。将领域模型从用户界面层、应用层、基础设施层分离出来,专注于领域问题的管理、业务知识的捕获和表达。图5展示了车间详细排产的领域模型。

图5 车间详细排产系统架构

表示层:负责向用户展现信息以及解释用户命令。

应用层:用来协调应用的活动。它不包含业务逻辑,不保留业务对象的状态,但保有应用任务的进度状态。

领域层:包含关于领域的信息。这是业务软件的核心所在。在这里保留业务对象的状态,对业务对象和它们状态的持久化被委托给了基础设施层。

持久层:作为其它层的支撑库存在。它提供了层间的通信,实现对业务对象的持久化,包含对用户界面层的支撑库等作用。

4 车间详细排产系统实现

依据上述领域模型和系统架构,开发环境为Visual Studio 2008,数据库为SQL Server 2005。在微软.NET应用平台下,采用Windows Presentation Foundation(WPF)技术实现。.NET平台很好的支持了面向对象技术,并为此专门开发了一种语言C#。新的WPF技术是.NET Framework的组成部分,WPF同时支持C/S和B/S结构,支持界面设计与业务逻辑开发的分离。界面设计采用XAML语言,可以对界面元素进行定义和刻画。通过数据绑定、事件响应与业务逻辑层进行交互。业务逻辑层,使用C#语言开发,根据系统架构设计,分为应用层和领域层。应用层负责响应事件与结果反馈。领域层负责各种对象模型的创建和管理。持久层负责与数据源通信,在.NET平台下,主要使用ADO进行连接[10]。在.NET平台WPF技术下,系统实现架构如图6所示。图7和图8为日历和工艺路线等基础数据管理。

图6 NET平台下系统架构

图7 日历管理

图8 工艺路线、工序管理

5 结论

本文首先对领域驱动设计的相关概念、开发模式进行介绍,然后遵照领域工程模式对车间详细排产的领域知识、业务流程进行研究,在此基础上建立了领域模型。在面向复杂系统建模时,对模型要素识别出实体、值对象、服务等对象,并对对象关系进行简化,进行模块的划分。 分层架构设计,使得软件开发人员能够在实现阶段更多的关注领域模型。最后,在.NET平台下,使用WPF技术,对系统进行了实现。实践证明,领域驱动设计模式下,软件系统的设计与开发更具有效率,软件系统本身更具有较好的可维护性、可扩展性性。

[1]Evans E.著.陈大峰,张泽鑫,译.领域驱动设计—软件核心复杂性应对之道[M].北京:清华大学出版社,2006.

[2]Abel Avran&Floyd Marinescu著.孙向晖,霍泰稳,译.领域驱动设计.精简版[M],http://infoq.com/cn/minibooks/domain-driven-desian-quickly.

[3]王鹏,刘渊,冷文浩.领域驱动设计在SPP系统中的应用[J],计算机工程与设计,2008,29(13):3312-3364.

[4]陈亮.基于领域驱动设计的软件开发方法和实例分析[J],铁路计算机应用,2010,19(9):51-54.

[5]张金松.领域驱动设计在航务海事系统中的应用研究[D].大连海事大学,2010.

[6]丁涛.基于领域驱动设计的物流平台系统实现[D].电子科技大学,2010.

[7]郑琴琴.领域驱动设计的业务逻辑组织方法研究[J].中国科技论文在线,http://www.paper.edu.cn

[8]史栋杰,孔华峰.领域驱动设计中资源库模式的设计与实现[J],电脑知识与技术,2011,6(33):9617-9618,9621.

[9]Michael Pinedo.Scheduling:Theory,Algorithms,and Systems Second Edition.[M],北京:清华大学出版社.

[10]Adam Nathan著.瞿杰,单佐一,夏寒.译.WPF揭秘[M],北京:人民邮电出版社,2008.

猜你喜欢

车间对象驱动
基于模糊PI控制的驱动防滑仿真系统分析
100MW光伏车间自动化改造方案设计
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
屈宏斌:未来五年,双轮驱动,砥砺前行
判断电压表测量对象有妙招
轨旁ATC系统门控柜接收/驱动板改造
招工啦
攻略对象的心思好难猜
“扶贫车间”拔穷根
把农业搬进车间