最近在开发一家外贸公司的进销存系统,小微企业,年销售额在百万左右,这是我第一次开发进销存系统,没有相关经验的我以为这套系统并不会那么复杂,但实际上它的复杂性被大大低估了。前端
偏偏就是这种外贸的小微企业,小订单会特别多,天天几乎都有数十单,一个订单里面可能会有几十个型号,总金额从几十到上万的都有,销售商品包括几十种大类,500多种型号,客户更多达500+,可想而知以前用excel管理起来有多困难,说实在点,原来可能就没办法管理或没管理,因此迫切地但愿能有一套系统来把各个资源要素整合起来进行统一的规范化管理。数据库
这家企业的负责人告诉我,他们用过好几家现成的系统,都难以达到他们理想的效果,归根结底仍是与他们业务不够契合。编程
为何会这样?大部分软件公司的销售通常作法都是拿自家产品去套客户需求,套住一个是一个,这种作法每每就没办法知足个性化的业务须要
大天朝中医博大精深,借用其纲领,就是“望闻问切”,在系统开发上也同样适用。后端
“望”:亲自看,看看企业到底什么规模,人员有多少,组织架构是什么,有没有已经使用的系统或工具?看看他们天天都在干什么。固然,前提是你有这个机会去到企业。架构
“闻”:多倾听,倾听企业负责人的想法,倾听管理人员和员工等各个层面的需求,倾听不是一味地接纳,一个有经验的开发者是能甄别出哪些是真需求,哪些是伪需求的,若是你没有相关经验,那么在后续要进行调整。框架
“问”:善沟通,首先要确认企业的表明也就是对接人,这一点很是的重要!全部的问题都与对接人沟通,此人必定要对该企业的核心业务很是了解,并且系统的建设全权由此人负责,结合望、切、闻综合分析,与对接人进行系统开发方面的沟通。模块化
“切”:多实践,好的产品在于不断的打磨,任何系统毫不可能一步到位,每每功能在设计与实际使用中的差异会很大,对于像我这样第一次开发这种系统没少进行重构,若是功能没有达到企业要求,或者不够完善,果断进行重构,否则程序的代码只会变得愈来愈臃肿,改动的代价愈来愈高。工具
这四种方法没有绝对的前后顺序,在项目的实施过程当中不断的穿插进行。性能
如今系统基本已经开发完成投入实际生产了,这里就以我目前碰到的实际问题来讲一下进销存系统复杂在哪里。设计
首先说明一下这里的复杂不一样于面向大众消费端的应用,因为用户数量局限在企业内部,因此我这里暂时尚未碰到性能问题。
这种系统的复杂度分为两大方面:业务和数据
要设计一个业务契合度高的系统就要把该企业的业务了解的尽量的全面和透彻,小微企业的业务流程通常都比较杂乱和灵活,首先要作的就是要把流程固化下来,起初并无直接与该企业探讨具体的功能实现,而是把他们全部的业务流程按照系统功能划分红了六大模块作成了excel表格,而后与对接人沟通,看看这六大模块是否能涵盖全部的业务流程。
肯定了模块后,进一步确认模块下的具体功能,详细了解该功能应知足什么样的业务场景,业务流程是如何运转的等。
这里经过订单管理来简单的说明一下,基本的订单管理都有新建、修改、删除的功能,订单中会涉及到商品、数量、与金额,好比新建的订单商品要不要出库,是新建订单时直接出库仍是须要主管审核后再出库?订单什么状况下能够修改,若是修改了该订单中已经出库的商品,是否须要做废该订单中这个商品,若是做废还要恢复做废商品的库存等等。
相似这样的业务需求会有不少,在确认功能时最好能穷尽每个需求项。
上面提到的这种业务需求在实际开发中不可避免,后期也会不断的冒出来,当合理的需求出现时,就要有一套行之有效的方法来尽量快速和便捷地响应企业需求。
说一下另一点比较复杂,也是比较头疼的地方,数据。
进销存系统开发的一大特色就是围绕数据的准确性展开。以前开发过不少其它各类各样的业务系统,但都没有比进销存对数据的准确要求的那么严格,进销存系统因为其对数据的特殊敏感性,原则上是不让业务员修改数据的,并且也不易修改,由于数据与数据之间的关联性太强,改了一处,与此关联的各处都须要进行修正,但每每一我的并不具有全部的修改权限,因此就须要确保各处数据的一致与准确性。
在对进销存的操做流程进行分解后,通常都会有如下几个步骤:
举了一个简单的例子,也因而可知商品是进销存系统很重要的一块内容,其中要作的就是对商品的数量进行运算。
这里面的数学模型并不复杂,可是当有几百个商品,数量翻几十倍时,再加上外贸要换算汇率,手续费等,不管是商品数量仍是金额,计算的过程就会比较复杂,会发现脑子彻底不够用,尤为是出错的时候,找半天才找到出错的环节,算到最后每每都是逻辑出错,而不是数学模型的错误。
因此个人经验是,当面对一个繁杂的业务时,每每要通过冗长的系统流程,在处理时,尽可能的能把它的处理过程拆分红多个function,让每一部分的function确保它只干一件事,只要把这件事作的准确就能够了。
用“望闻问切”的方式充分了解需求,经过切合自身实际的方法快速响应,以精益求精的态度不断改善系统,确保数据的一致性和准确性。