我强调了十年的企业信息化系统开发的思想,竟然与《程序员》著名作者邢波涛不谋而和。摘录他的《程序员》2007年7月文章《系统架构与业务架构》,共勉之。
国内绝大部分企业,对于ERP,进销存这类业务系统的开发,采用的都是经典的SSH架构。对于ERP,存这类业务系统而言,架构必须分层,分为系统架构和业务架构两层。看到这里,每个人都会说,我们一直是这么做的啊。但我观察到很多企业的业务系统,都没有业务架构层,直接拿Spring的系统架构作为自己的架构设计,由JSP调用Action,Action调用Service层,然后Service又调用数据库打交道的DAO层。
如果采用的Hibernate,Dao又得调用Hibernate的类,然后每个表还得再生成一个BO类,这样,一个最简单的查询也得牵扯到Action->Service->Dao->Hibernate->Bo,5个类,外加一个JSP。Spring其实一点也不轻量,如果JSP再引入jquery或Ext这类视图层,一个简单的增删改查,哪怕只有一个表,就得有10个类和一大堆配置文件。因此我认为这是ERP、进销存这类业务系统存在十几年却没有任何一个成熟方案的根本原因。采用原型开发、结对编程、权限编程、敏捷开发、持续集成都没有任何用,个人很偏激地认为,这些方法都是某公司拿过来骗人的。否则,ERP、业务系统也不会失败率那么高了(几乎100%失败,不上ERP等死,上ERP找死)。
我还是举那个B2B2C经典的例子,一张采购入库单,触发了以下几个业务逻辑:(1)采购入库单本身主子表单据的增加;(2)采购商应付账款在增加;(3)采购商库存在增加;(4)厂商或者分销商应收账款在增加;(5)厂商或者分销商会有一个销售出库单;(6)厂商或者分销商库存在减少。如果采用经典的SSH架构,这个Service层得多复杂啊。为什么会有一个Service层呢?高人们就会告诉你,一是因为这是一个事务,必须有总控,入口单一;二是因为要复用,可以拿出去给其他模块使用。对于第一个理由,我是同意的,但事务的起点,我也不认为是Service层,而是Action触发的,我觉得Action才是业务逻辑的装配,而Service层根本没有存在的必要;至于是否复用,我个人认为复用的是最小逻辑单元,而不是整个业务逻辑。比如,增减库存是可以复用的,而出入库单的业务逻辑,是没有任何可复用可能的。系统架构师的作用,就是把这段非常复杂的逻辑,设计出耦合性更小的业务层架构,给程序员使用,而不是把SSH简单包装一下,就直接扔给程序员了。折腾程序员的最终结果,就是跟装修一样,大家(开发商和客户)都不满意,产品或者项目开发周期延迟。
--邢波涛(北京新软孚信息技术有限公司技术负责人。关注SaaS管理软件和B2B,B2C电子商务的融合)
邢波涛在这篇文章说的话就是我一直所说的话,真是心有灵犀了,我十年来一直就是在打造这样一个信息系统,关注客户的业务需求,关注程序员开发成本和时间,企业信息系统的健康发展,关注客户的满意度。我一直强调做软件跟其他行业不一样,要有独立思考的能力,要有精益求精的思想,要有创新和学习精神。当你准备对代码按CTRL+C的时候,你一定要想一想能否有更好的办法,当然,你需要一本叫《设计模式》的书帮你打通任督两脉,让你的创造力源源不断的输出。
很多进入J2EE开发的新人,都畏惧于J2EE的复杂性,当年的EJB已经没落了,想不到Spring代替了EJB,却成为了下一个“EJB”,如果按照所谓国际标准的J2EE开发模式,他们可能永远都是一粒螺丝钉,永远都要面对一堆烂摊子,他们根本就被困死在软件工程的焦油坑里直到他们离职,跳到另一个焦油坑。有些人只是拿着“教你如何使用SSH一步一步搭建系统”这类的教程去搭建系统,把SSH做为万金油框架,停留在低效和重复的开发水平,缺乏精益求精的精神,把开发框架变成了管理和限制程序员代码开发的工具,而不是帮助程序员更好更快地完成项目,这种开发框架既没有为客户快速有效地解决问题,也没有为其他程序员简化开发工作,对程序员的抱怨和建议置若罔闻,搞出来一个个难以维护和维护成本高企的系统。
JAVA是一门非常优秀的语言,有非常优秀的开发资源,而J2EE开发被极大的复杂化,90%以上的j2ee系统和产品都过于复杂,程序员为了java开发相对较高的薪资,也就逐渐麻木了思考,花了几年时间好辛苦才掌握了SSH已经累了,创新的激情都慢慢冷却了,客户也习惯了J2EE系统高昂的开发和维护成本,两者成为了J2EE信息化系统发展的最大阻力。没有对业务逻辑的有效管理和重用,减少不必要的代码,系统就会变得越来越难维护,拥抱变化的能力就会越来越差。
2年前跟邢波涛有过短暂的沟通,JavaEye改为ITEye后,跟他的聊天记录都没有了,失去跟他联系的方式了。
- 大小: 242.7 KB
分享到:
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1. 用户角色 管理员 药店员工/药师 客户 2. 功能描述 管理员功能 用户管理 创建、编辑和删除药店员工和药师的账户。 设置不同用户的权限,确保敏感信息的安全。 库存管理 实时监控药品库存状态,设置库存预警,防止缺货或过期。 支持药品入库、出库和退货记录,自动更新库存数量。 商品管理 添加、编辑和删除药品信息,包括名称、规格、价格、生产厂家、有效期等。 分类管理药品,如处方药、非处方药、保健品等。 销售管理 查看和管理销售记录,生成每日、每周和每月的销售报表。 分析销售数据,了解畅销产品和季节性变化,以优化库存。 财务管理 监控药店的收入与支出,并生成财务报表。 管理支付方式(现金、信用卡、电子支付)及退款流程。 客户管理 记录客户的基本信息和购买历史,提供个性化服务。 管理会员制度,设置积分和优惠活动。 药品监管符合性 确保药店遵循相关法规,跟踪药品的进货渠道和销售记录。 提供合规报告,确保按规定进行药品管理。 报告与分析 生成各类统计报表,包括销售分析、库存分析和客户行为分析。 提供决策支持,帮助制定更好的经营策略。 药店员工/药师功能 销售操作 处理顾客的药
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
今天吴老师上课的时候说我.txt
检测骨架图像的交点Matlab代码.rar
MMC simulink 模块化多电平变流器 载波移相 双闭环仿真 输出谐波分析,线性自抗扰控制LADRC 有仿真文件
自动驾驶控制-斯坦利(stanely)算法路径跟踪仿真 matlab和carsim联合仿真搭建的无人驾驶斯坦利控制器仿真验证,可以实现双移线,圆形,以及其他自定义的路径跟踪。 跟踪效果如图,几乎没有误差,跟踪误差在0.05m以内。
TongRDS是redis的国产化替代品之一,里面含有相应的安装部署包及操作流程,详细介绍TongRDS的基本部署和基本开发使用。
基于mpvue实现豆瓣电影微信小程序@zce_mpvue-Douban
隔离型DCDC变器设计,LLC谐振变器闭环仿真,变频控制。 有自己做的对应明 ,十分详细。
Delphi in Depth - FireDAC.rar
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
ShellBox微信小程序,集日程查询、成绩查询、电费查询、图书查询等功能于一体的高校微信小软件_ShellBox
Java小程序项目源码,该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:小程序 后端框架:SSM/SpringBoot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven
微信小程序校园微社区_ zafuBBS
计算图像的多向特征编码 (Contour Code Representation)Matlab代码.rar
电池超级电容混合储能系统能量管理超级电容matlab simulink储能模型仿真,能量管理蓄电池充放电模型 相关参考。
武汉市新版劳动合同
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作