ERP系統架構的設計與實現(轉自CSAI)

ERP(Enterprise Resource Plan,企业资源规划)是建立在信息技术基础上,利用现代企业的先进管理思想,
  为企业提供决策、计划、控制与经营业绩评估的全方位、系统化的管理平台。ERP是一种管理理论和管理思想,
  不仅仅是信息系统。它利用企业的所有资源,包括企业的物流、资金流和信息流,为企业制造产品或提供服务
  创造最佳的解决方案,最终达到企业的经营目标。
 
  南京跃进轻汽集团(以下简称南汽)的ERP系统是以信德勤公司的DCI/3(需求链智能解决方案)为蓝本,针对汽车
  行业的特点和轻汽集团的需求加以改进开发的。我们设计了一种开放式的具有良好的拓展性和移植性的系统架构,
  使得在此架构上开发出的ERP系统不但符合南汽的需求,而且能够产品化,可推广到整个汽车行业。
 
1 ERP系统需求
   南汽集团属于典型的离散型制造业,其自身的生产管理有着鲜明的特点:
   (1)产品品种丰富,既可以进行单件小批量的生产,也可以进行多件大批量的生产,既可以在客户的订单驱
       动下安排生产,也可以在市场的驱动下进行生产;
      
   (2)各个生产系统相互依赖,结构完整,生产高度专业化流程化;
   (3)完成复杂任务时需要外协作;
   (4)系统使用者的活动范围相对固定。
  
   南汽集团对于ERP系统的需求为:
   (1)系统界面简洁,操作简单,系统运行稳定,具有卓越的容错性能;
   (2)适应大量实时数据处理的需要;
   (3)有良好的安全性能,各个系统之间数据共享但是具体访问操作有权限控制;
   (4)系统功能要求完善,能够对企业所有部门的业务运作进行统一管理,包含的具体模块为:
       基础数据管理、销售分销管理、采购管理、应收应付管理、库存管理、计划管理、质量体系管理、
       财务管理、设备管理、供应链管理和客户关系管理等。
2 ERP系统架构
   南汽ERP 系统的架构是采用Delphi开 发的C/S体系结构,它采用了Borland 的MIDAS 技术并加以改进,
   采用TCP/IP作为信息传送协议。和普通的C/S 3层结构(客户端、业务逻辑层以及数据库)相比,南汽ERP系统架构中
   多出了访问适配器和数据访问层。这样设计的主要目的是消除客户端或业务逻辑层直接访问数据库的行为,将所有对
   数据库的访问集中起来在数据访问层中实现,用COM组件的形式提供调用服务。其中访问适配器的是集中所有通用的
   系统操作,提供统一的访问服务,而客户端和业务逻辑层就不必关心如何通信、如何查询等细节操作了。这样,一旦
   对后台数据库系统进行调整甚至更换整个的数据库系统,只需要在数据访问层重新配置参数就可以保证系统的正常运行,
   而对于业务逻辑层的调整,则反应在访问适配器的修改配置上。这种设计思想真正实现了系统各个模块紧内聚松耦合,
   开发人员可以不必了解整个系统的结构和功能而专注于具体某一模块的实现,大大提高了开发的效率,并且在实践运行
   中证明减轻了系统对数据库结构的依赖性,增强系统的安全性和健壮性,同时也提高了系统的灵活性,为产品化打下
   良好的基础。

3 ERP系统架构的实现
   就南汽ERP 的应用而言,MIDAS是一项将数据集从服务器上的TTable 或TQuery对象转移至客户端的TClientDataSet 对象的技术。
   它允许在Variant中包装数据集,并将它们以参数的形式通过网络传送进行远程调用。它包括把数据集转换成为服务器上的
   Variant的技术和卸载客户机的数据集,并通过TClientDataSet组件的帮助在一个网格中显示数据的技术。MIDAS 的技术基础
   就是COM程序模型,但是在南汽的ERP 系统中没有选取MIDAS 中常用的TDCOMConnection组件进行客户端和服务器之间的通信。
   因为南汽集团下属有很多子公司和专业分厂,每个子公司和专业分厂都有自己的局域网,并且局域网之间的信任关系没有
   很好地建立并管理。由于DCOM 的缺陷,当客户机和提供COM服务的服务器不在同一网段的时候无法调用服务,因此在系统设
   计中强制使用TCP/IP协议进行通信。
  
3.1客户端/Client(.EXE)
   南汽ERP客户端的主要功能是完成与服务器的通信,通过访问适配器来提交用户的操作并且返回服务器处理结果信息给用户,
   并且完成部分权限管理和模块调度的功能。为了对客户端的系统模块进行比较方便的管理,系统对客户端的模块进行了抽象,
   称之为Module, 每个Module都是一个能够进行一组逻辑管理的单元,并将系统的权限管理和模块调度建立在Module的基础之上。
   TModule 类中声明了一个IModule接口,该接口有一个称之为DoAction的 方法。DoAction只接受传入的参数,并传出一个参数,
   来返回调用的结果和状态。模组之间传递参数实际上是一个SafeArray的 Variant,在Delphi 中,该形式可以方便地表示为一个
   VarArray,ParamUtil类 并不是一个VarArray,而是一个对VarArray中的数据元素进行方便提取的工具类。在TParamUtil当中,
   可以方便地对数据进行提取,包括最典型的一些Com数据类型。另外,在TParamUtil的 构造函数当中,存在一个CreateEx,该函
   数包括2个 参数,其中第2个 参数用于声明该TParamUtil处理的SafeArray是否要创建实例。IModule 中的DoAction 方法接收的
   就是一个Variant形式的参数。它包括一个ModuleID表明调用的模块的身份,一个UserID 表明用户身份,一个Verb 表明用户在
   该Module所提交的操作(查询、修改、统计等)的类型。
  
   DoAction方法接收参数之后,判断用户是否具有在该Module中进行该项操作的权限。如果没有权限,返回出错信息;如果有权限,
   则通过访问适配器提交操作。下面简单介绍一下TModule及其子类中的重要方法。
   (1)TModuleGetGUID方法:系统要通过回调该方法,来唯一标志该Module。
      GetVerbs方法:该方法告诉系统,在该模板当中实现了哪些动作,系统通过回调该方法来了解系统当中存在哪些原子操作。
      在系统的权限管理模块当中,通知系统,并进而进行权限管理。
     
   (2)TMDIModuleAfterConstruction方法:该方法告诉系统,它所关心的窗口的类名是什么,注意是类,而不是实例。因为,
     每个TMDIModule是与一个窗口关联在一起的,所以,这里也就不难理解。实现比较简单,只要书写一句FormClass:=<某个窗口类名即可>。
    
   (3)TEditModuleGetEditDS方法:该方法是一个抽象方法,目的主要是为了得到一个用于进行编辑的DataSet,否则,系统将无法进
      行正确的数据处理。
      GetQueryName方法:该方法得到用于进行查询的名字,系统将通过DataAccess 的QuickQuery方法来得到所查询的数据。
      GetUpdateTableName方法:该方法得到用于进行更新的物理表名,返回的结果一定是一个在数据库实际存在的物理表名,
      否则,系统将报异常。
     
      DoSum 方法:该方法是一个进行DataSet数据求和的方法,子类通过实现该方法来告诉系统如何进行求和操作和对哪些
      数据进行求和操作。操作的元件主要使用在父类当中的TSumList元件进行。
     
3.2业务逻辑层/Business Logic(Complus DLL)
   在业务逻辑层封装了ERP系统业务处理流程。包括销售管理、采购管理、库存管理、设备管理、质量管理、人力资源管理、应收管理
   和应付管理等。财务管理在系统中的地位极其重要,为了确保财务上的安全性和严谨性,暂时采用OEM的方式与其它模块通过固定的
   接口进行数据交换。业务逻辑层中每一种业务流程都是以封装成动态链接库的形式供客户端调用,因此业务逻辑的变更只涉及单独的
   DLL文件,不影响系统其它流程功能的运行,具有极强的可拓展性。
  
3.3访问适配器/Adapter
   系统在Adapter.pas中提供了一些进行系统操作的Adapter类,这些类是不与操作的窗口界面绑定在一起的工具类。
   如TQueryAdapter就封装了一个进行数据查询和创建一个空的TClientDataSet的 方法。TSaveAdapter就封装了一个
   将TClientDataSet当 中的数据提交给DataAccess进行数据保存的处理方法。
  
   通过调用这些工具类,负责客户端开发的人员不需要了解复杂的数据库结构和业务逻辑信息,所有的操作请求和结果
   反馈都是通过访问适配器来进行的。这样减少了开发准备期,极大地减轻了各个模块各个应用层之间的耦合性,提高了系统的拓展性。
  
3.4数据访问层/Data Access(COM)
   数据访问层是为了增强系统的移植性和拓展性,为做到系统的开发与数据库无关而编写的一组COM组件。利用COM的平台无关特性,
   将系统所有的对数据库的访问封装起来提供统一的服务,统一开发客户端和业务逻辑的程序员可以不必考虑数据库的结构而只需
   要调用数据访问层的接口即可。不但屏蔽了数据库的结构信息,增强了系统开发和使用的安全性,而且对于SQL语句的统一管理也
   增强了程序开发的可控性和代码的规范性。由于对于DataAccess,它只接收以SafeArray形式封装的数据,因此数据访问组件提供了
   几个形式的工具类,可以进行包括从TClientDataSet 的Delta 到SafeArray,从RecordSet到Delta等的转换工具。这样,即使是更换
   了数据库系统,整个ERP的客户端和业务逻辑层不需要进行任何的变动,只需要改变数据访问层的参数设置即可。系统因此变得更加
   灵活,适应性更强,易于由单纯的项目转换成适应行业的产品。

3.5数据库/Oracle
   后台的数据库采用Oracle。为了提高数据库的性能,增强ERP系统的安全性和稳定性,将南汽ERP系统的数据库分为企业数据库
   和应用数据库。企业数据库存储的是ERP的基础数据如标准BOM、 生产BOM、工作中心、工艺路线、工作日历以及员工和客户的
   基本信息等。这部分数据访问频率相对比较低,其中大部分访问以查询操作为主。应用数据库存储的是和业务逻辑相关的数据
   如应收应付、库存以及销售分销信息等。这部分数据访问比较频繁。
  
4  结论
   通过南汽集团ERP系统的设计和实现,可以得出以下一些结论:南汽集团属于离散制造业,其ERP 系统可采用C/S结构;
   在系统设计中,紧内聚松耦合的模块设计能够增强系统的灵活性并易于产品化;在系统开发中,应该采用模块管理的机制,
   使得开发处于可控的范围并且易于维护;考虑到系统可能运行在不同的平台上以及可能应用不同的数据库系统,应该避免
   客户端和业务逻辑层直接访问数据库,造成对数据库系统的依赖。实践表明,该系统框架是可行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值