基于构件的采购软件的设计与实现
2022-11-16孙蒙
孙蒙
(用友网络科技股份有限公司 北京市 100094)
1 引言
近年来,在经济全球化步伐加快、电子商务与信息技术飞速发展的背景下,为了促进企业间合作共赢、打通企业间的信息孤岛,越来越多的企业开始使用在线的企业协同软件。随着企业间经济贸易的交流频率逐步增加,企业的供应链管理工作也变得越来越重要。[1]
经调查发现,目前市面上软件提供商提供的B2B 采购软件因为既要满足国企对于系统稳定性和安全性的要求,又要满足私企、外企对于系统个性化的需求,都面临着更新维护的难度随着系统的复杂度不断提高的痛点。针对这一问题,许多企业使用增加工作量的方式,通过投入更多的开发成本和更优质的开发资源对系统不断的进行优化扩容来满足市场需求。然而,上述解决方式仍存在着开发成本高的不足,因此本软件提出使用基于构件的软件开发方法进行采购软件的开发工作。
基于构件的软件开发是一种以构件技术为核心的软件开发方法,运用以构件为中心的思想来指导软件生命周期的各个阶段,包括需求分析、系统设计、系统实现、测试、部署、维护和升级,甚至系统创建过程中的项目管理也是基于构件的。构件技术以面向对象开发为基础,是通过将实现类似功能的对象有机的结合在一起,来构造软件系统的软件技术。在开发新的业务需求时,通过对构件进行结合重组就可以快速的完成业务需求的开发。在技术快速发展,需求经常变更的今天,构件技术以它的缺陷密度低、维护成本低、开发成本低的特点,为解决软件危机提供了更好的解决方案。
2 构件技术介绍
2.1 构件技术的概念
构件,是指一种具有相对独立性、互换性、以及功能性的单位软件。构件的语义完整、语法正确并且具有可复用价值,是复用过程中能够明确予以辨识的构成成分。[2]一个独立的构件既可以作为一个大的单元中的组成部分,又可以由许多构件组合而成。2015 年,由蚂蚁集团设计并开发的Ant Design 软件,就是由于其产品系统庞大、复杂且变动和并发频繁,常常需要设计者与开发者能快速做出响应。Ant Design 将复杂的系统拆分为单元,其组成部分为独立的构件。开发人员可以通过构件的接口访问它的服务,并可根据业务需求进行构件的组装和替换。
构件技术是指将软件的数据、功能等,以构件的方式进行划分、开发和管理,之后通过组装构件的方式来构造软件系统的软件技术。[3]基于构件的开发方法分为构件获取,构件开发和构件组装三个阶段。构件通常会由专门的构件库进行管理,并在产生新的构件后会及时的更新到构件库中。构件库提供对构件进行描述、分类、存储和检索等功能。构件获取是指在开发业务需求时,根据需求内容在构件库中选择已建立好能满足需求的构件;构件开发是指若构件库中的构件通过业务参数修改、接口修改等不能实现需求时,进行新的构件开发并添加到构件库中;构件组装是指将选择的构件进行结合重组完成业务需求的开发。通过运用构件技术,开发人员可以进行软件构件的复用,减少重复开发,缩短开发时间,降低软件的开发成本。
2.2 构件技术的分类
基于构件的软件开发分为三种开发技术:COM(Component Object Model,构件对象模型),CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构),EJB(Enterprise Java Beans,企业JavaBean 技术)。
COM:COM 原指微软公司基于微软平台开发和设计的一种,更符合人类的行为方式的软件开发技术。[4]COM 解决的痛点是软件的交互问题,其通过建立统一的业务接口标准,使构件能够在系统中进行共存和替换。在COM 架构下,开发人员可以根据需求设计接口标准,并根据接口开发出各种功能专一的构件,然后按照需求将这些构件进行组合,以实现不同的需求场景,构成复杂的应用。这种开发技术的优势是系统中的构件可以便捷的复用和替换,并且可以方便的将应用扩展到网络环境中。COM 严格意义上来讲不止是一套微软环境专用的开发技术,它实际上像是结构化编程及面向对象编程的方法一样,也是一种平台通用的“COM 方法”。“COM 方法”通过定义了一整套完善的标准机制,用于客户之间通讯和软件开发。随着技术的发展,COM 技术逐渐发展出了DCOM(Microsoft Distributed Component Object Model,分布式构件对象模型)、MTS(Microsoft Transaction Server,微软事务服务器)和COM+(Microsoft Component Services,微软组件服务)等多个不同的版本。在原有的COM 组件技术之外,更加注重于分布式网络应用,添加了如事务特性、安全模型、管理和配置等功能特性。
CORBA:CORBA 是由OMG(对象管理组织)协会提出的一种面向对象应用程序体系规范。CORBA 针对软件系统和硬件互连的中间部分,使用IDL(Interface Definition Language,接口描述语言),ORB(Object Request Broker,对象请求代理)和IIOP(Internet Inter ORB Protocol,网络ORB 交换协议),三个模块构成中间件进行平台和语言的转换,为解决硬件和软件系统的互连提供了解决方案。开发人员通过使用IDL 语言建立CORBA 对象,CORBA 对象可以将底层的若干相关方法和属性以Stub 码或框架代码的形式编译成所选用的语言。
EJB:EJB 是由Sun 公司基于Java 语言基础提出的,用于开发和部署多层结构的、分布式的组件组合重用技术。[5]在系统开发的后期,系统应用越做越大,这使得开发人员不得不消耗大量的时间去解决系统级问题。针对这一问题,EJB 技术提出了EJB 容器和EJB 组件的概念,为系统提供了一种可重用的、通用的解决方案。在以EJB 为核心的应用程序中,开发人员将精力主要集中在EJB 组件的开发上,将系统问题交给EJB 容器处理,这样的设计减少了开发人员的系统维护工作,加快了业务的进步。随着EJB 技术的发展,Spring 框架也应运而生,大大简化了EJB 技术的开发成本。
3 采购软件分析
3.1 采购软件现状
《“十四五”现代流通体系建设规划》指出,国家将着力补齐商贸流通业现代化短板,聚焦商贸流通业高质量发展,加快形成统一的现代化流通市场。[6]在此背景下,作为构成商贸流通现代化的关键环节,B2B 采购软件能整合企业供应链形式,有效打通企业间的信息孤岛,形成集采购、销售、流通于一体的管理机制。随着商业模式的变化发展,采购软件在需求方面呈现如下特点:
3.1.1 庞大的市场需求
由于企业的数智化发展加速,在线办公愈发受到企业的青睐,更多企业选择使用线上谈判交易的方式,这使得软件的规模愈发庞大。原有的采购软件多使用混合式开发,开发新的软件功能和维护老的软件不能合理的拆分开。开发人员必须要同时兼顾着维护老的软件稳定性和开发新的业务需求,在开发过程中难免会产生意想不到的错误,这给开发和测试增加了许多多于的工作量。
3.1.2 多样的软件需求
随着更多的企业开始选择使用在线采购软件,软件的个性化需求也随之增加。一些新兴企业为了彰显他独特的企业文化,吸引更多的投资,通常需要较为新颖的,个性化的服务。而像国企,尤其是政府机关这类的企事业单位,由于其特殊性,网络设备通常需要较高的安全级别,较稳定的运行环境和较固定的使用模式。原有的采购软件为保证统一的软件风格,通常会按照统一的标准进行开发,不能满足众多类型企业的不同需求。
3.1.3 精进的技术需求
为了迎合不同市场需求,采购软件一直使用较为保守、通用的开发方法,如需要Web 端开发人员手动实现页面的响应式渲染、为兼容Internet Explorer 8 不能使用ECMA Script 6 的新API(Application Programming Interface)、基于Document Object Model 操作的页面元素开发方法,这些都消耗了大量的资源。随着技术的不断更新,新的基于数据流的响应式框架不断涌现,新生技术的性能、语义化和鲁棒性不断被优化,原有的采购软件使用的技术为了与新技术共存,必须要付出大量人力去进行维护和调试。
因此,为了开发出更好的软件,吸引更多企业的入驻,更好的扩大业务线,基于构件的采购软件的设计和开发工作,成为一件迫在眉睫的事情。
3.2 采购软件设计
采购软件是针对采购中的订单管理环节而设计的服务类软件,通过使用采购软件可以为不同企业提供物料管理与信息交换的渠道,打通企业间的信息孤岛。采购软件的产品设计工作由架构师、程序专家和产品经理完成,主要负责对软件中的录入物料,生成采购订单和订单的确认、生成、取消、完成各环节的数据流和用例场景的整体设计。采购软件的程序开发分为前端开发和服务端开发,前端由三名Web 端开发人员使用React 框架进行页面及前端构件的开发,服务端由八位后端开发人员使用Spring 框架进行服务端接口与服务端构件的开发。最终设计出的软件由商品采购、对账单和开发票三个模块组成,模块具体设计如下:
3.2.1 商品采购模块
商品采购模块为销售公司和采购公司提供了一个物料录入和选择的平台。
销售公司的销售员将待销售的物料和期望的价格录入到采购软件中,并提交给管理员进行物料的合规性审核。经过管理员审核通过后,物料将会以商品的形式被展示到软件提供的在线交易市场中,供采购公司进行商品的挑选和议价。
采购公司的采购员通过使用软件提供的在线交易市场浏览感兴趣的商品。在线交易市场具有筛选的功能,可以通过对商品信息、属性、规格、地址等信息进行查询或筛选操作后,列出符合要求的商品便于采购员进行选购。采购软件对用户选购的商品提供对比的功能,采购员将多种类似的商品加入购物车后,可以选择不同的商品进行横向比较,通过对比不同商品在某个属性中的具体数值确定要购买的商品,并生成采购对账单。
3.2.2 对账单模块
对账单是用来记录采购公司与销售公司的交易明细的单据,包括交易数量,交易状态,交易金额等信息。对账单分为待发布状态、待供应商确认状态、待采购商确认状态、已生效状态和开票中状态几个不同的状态节点,刚生成的对账单将会在待发布节点。
采购公司通过编辑对账单中的调整无税单价、调整含税单价、调整税率、采购扣款含税金额、采购扣款无税金额的信息,来调整本次采购的物品的期望价格,修改并确定发布对账单信息后,销售公司会收到这张对账单,对账单状态转为待供应商确认状态。
销售公司通过登录采购软件并进入销售对账单节点,即可查看公司收到的对账单的信息。销售对账单节点展示了来自各个不同的采购公司提交的采购对账单。销售公司可通过筛选希望看到的采购公司名称或对账单号码,来查看对账单状态、采购公司需要购买的物料和期望的报价,确定是否同意交易,并发送给采购方,对账单状态转为待采购方确认状态。
3.2.3 开发票模块
如果采购公司和销售公司对于交易的物料和期望的价格达成了一致意见,经过确认的表单状态将会流转到已生效状态,并允许对这张生效的对账单进行开发票结单的操作。
开发票模块的发票种类分为销售发票和实物发票,销售发票就是为采购公司和销售公司在线进行的交易操作开具在线发票,无实际纸质发票;而实物发票及采购商和供应商在线下进行交易,并开具的纸质发票,采购软件支持上传发票到软件中进行之后的结单操作。开发票过程中,由于在线开具的发票在计价单位、采购数量和结算金额中有可能造成尾差,销售发票允许对最终金额进行小于0.1 的尾差调整,保证最终金额为合法的整数。
在该软件中,对账单的生成、转发、调整、确认尤为重要,针对这一部分内容,选择使用数据流风格中的管道‐过滤器架构风格,保证从生成到结束的过程中,数据的唯一性。
4 软件设计与实现
4.1 软件设计思路
基于构件的软件需要首先规划好软件的功能构件,再使用构件技术设计并实现软件的细节构件,包括web 端构件和服务端构件。根据业务需求,软件可分为以下五项功能构件:
(1)商品管理构件。负责对软件中录入的商品进行分类管理,主要由商品属性构件、商品库存量构件、商品报价构件三个子构件组成。商品属性构件对商品的具体属性进行分类,分为商品的类别、用途、规格、单位和公司。用户可以通过搜索商品的关键字信息,查找需要的商品;商品库存量构件对商品的剩余库存进行监控,根据销售公司调整的商品剩余库存数量和采购公司已购买数量,动态控制剩余的可购买数量;商品报价构件控制商品的价格,根据采购公司和销售公司的商议而动态调整,最终确定双方成交价。
(2)用户管理构件。负责对软件中录入的公司、公司权限、公司关联商品进行管理,分为销售公司管理和采购公司管理两个子构件。销售公司管理构件主要负责审核销售公司的销售资质,对未具有销售资质的企业不开放销售权限,并提醒他们完成资质上传。拥有销售权限的公司上传商品信息后,管理构件将会通过关键词过滤和图像过滤审核商品是否涉及敏感信息。成功通过资质审核并上传了商品信息的公司,管理构件需要将公司信息和所售商品进行关联,给予销售公司对商品的价格,库存,金额的管理权限。采购公司管理构件主要负责提供采购公司的信息注册,审核采购公司的公司信息,避免非法人员盗用企业信息。对已经审核通过的采购公司,提供查询,交易,与销售公司私聊等权限。
(3)状态管理构件。负责对软件中商品的所处状态进行管理,商品由上架、待采购商发布、待供应商确认、待采购商确认和开票结束共五种不同状态组成,允许返回之前状态、停止当前状态和继续到下一个状态。供应商提交商品后,通过用户管理构件和商品管理构件的审核,进入到商品上架状态,之后通过采购商和供应商的价格协商,相继的进入到之后的各个状态。采购商和供应商对于商品的价格,数量等批准后,商品即进入下一状态;对商品的内容,信息,价格,数量等存在疑义的可以拒绝进入下一状态,并允许转入到上一状态中进行修改。最终供应商和采购商完成交易的商品,商品库存数量中将会减去已完成交易的商品数量,状态将修改为结束状态,并允许对这单交易进行开发票的操作。
(4)发票附件管理构件。负责对已完成的交易进行状态记录和发票管理,允许使用在线生成发票的方式进行记录或通过上传发票附件的形式进行记录。买卖双方可以使用采购软件进行在线截单,或在线下进行当面交易。在线截单允许用户对交易单最终的尾差进行调整,并通过发票模板开具打印发票。线下截单允许用户上传实物发票,软件将对发票内容进行扫描并录入发票信息。
(5)商品价格管理构件。负责管理交易物料的单价和总金额,销售公司和采购公司可以在交易过程中对所需要进行交易的物料的单价进行协商。销售公司在录入物料的时候需要设置期望单价、价格标识和扣款类别,价格标识分为含税优先和无税优先,扣款类别分为应税内含和应税外加,含税单价、无税单价、税额和金额的具体数值会根据价格标识和扣款类别来调整计算方法。采购公司根据商品的价格提出自己的期望价格,并通过计算方法获取其他相应的价格数值,提交给销售公司进行议价。销售公司可以选择拒绝采购公司提议的报价,并将对账单退回采购公司,采购公司可以选择继续修改价格、放弃购买或将对账单中的某件或某几件商品进行遗留购买。最终经过买卖双方的商议,可以选择使用双方均认可的价格进行交易,或取消本次交易。
4.2 软件构件的设计
4.2.1 软件的Web 端构件设计
采购软件中除物料金额的实时计算外,使用的均是单向数据流,因此Web 端构件选用React 框架,MVC 结构。Model 层负责处理业务规则,可以为多个View 层提供数据,View 层是用户界面,可以为用户提供可视化界面并允许用户操作,Control 层用于响应用户交互操作并调用Model 和View 完成用户需求。
如图1 所示为构件的具体设计代码,将构件进行组合后可以完成相应功能的开发。
图1:构件的具体设计代码图
软件Web 端构件主要进行用户信息手机、商品管理和金额计算,将收集到的信息发送到服务端进行记录。Web 端主要使用策略模式,通过响应用户的操作和金额的动态计算,选择执行下一步操作的构件,达到构件的复用和信息融合。
4.2.2 软件的服务端构件设计
基于构件的采购软件服务端构件主要对Web 端进行信息接收和状态控制,并可根据Web 端发送的信息进行构件配置。由于Web 端可能会发生并发性问题,为了保证信息的准确性,服务端构件需要根据Web 端发送报文的时间戳进行重新计算,核对所有信息完整无误后再进行数据的保存工作。
4.3 采购软件特点
为确保本文设计的软件具有良好的应用价值,经过反复的试用和修改,本软件取得比较好的效果。
在面对不同的市场需求方面。构件技术可以通过使用统一的接口规范,将大的构件拆分成小的构件进行维护。软件可以通过构件替换的方法,进行持续更新。解决了不同版本代码混杂造成的重复分析、重复开发、重复测试问题。
在面对个性化软件需求方面。本软件可以通过用户构件进行企业个性化需求的隔离,给不同的企业配置不同的构件。企业新增个性化需求后,开发人员可根据需求内容,通过选择已开发的基础构件或开发新的构件进行构件的组装,即可将新需求添加到软件中。
在面对快速的技术更新方面。本软件支持将新技术应用到构件的更新和测试中,不需要再对整个软件进行分析和维护。解决了新技术与老技术之间的兼容性问题,减少了工作量消耗。
5 结语
本文通过对构件技术和现有的采购软件的分析,提出基于构件的采购软件的设计方案。通过将软件的功能拆分成各部分组成构件,对Web 端构件和服务端构件进行了具体的设计与实现。经过在多家企业单位试用发现,基于构件的采购软件能从现有软件中完整准确的继承原有功能,并比原有的软件更为高效,具有较好的实用性和可靠性。