哲人手指远方,目光深邃,说了一句:TMD。
于是SOA的话题扯来了。
数字应用的世界里应该都是一个个的小球,代表着一个个简单的功能,几个小球组合起来,就是一个超级无敌的变形金刚。我们程序员学设计模式、学架构、苦练抽象/接口/范型、搞平台,终究敌不过让人想拿棉花当板砖撞头的用户大帝。我们盼啊盼,盼了CORABA,盼来了EJB,盼来了COM+,如今我们又盼来了SOA,一个个设计精巧思考成熟的组件模型体系。但是,我们的胜利号角怎么还是没有吹响呢?我们怎么还处在石器时代照着石头磨刀呢?
让我们来仔细分析分析,用范师傅的话说就是捋捋,否则容易乱了。
用户往往会这样告诉我们,我要看到这样的数。
我们的项目经理一听,哦,你要的是一张报表。但报表的数据需要录入才能统计出报表啊。嗯,再调研录入什么。客户就会说我们平时手工是怎么计算这些数的,这些数的原始凭证是怎么产生的,是什么人填写的,说了一大串,项目经理猛记,这就成了流程,嗯,咱们软件也这样处理。再跟客户要一张空白的原始凭证样纸,就OK了。有输入,有统计,有业务处理流程,齐了。回家跟程序员说清楚,开发去啦。
嗯,没几天开发出来了,用户一用,嗯,不错,大致是想的那样子,但这里需要再改改,不好用。
没关系,没关系,这块好改。
一个项目就这样来回几次就验收了。
但我们并不想一次编程一次运行啊,怎么也得多卖几家,反正软件也开发出来了,不卖给其他客户也就在那儿搁着。于是四处借机给其他客户不断推荐、影响、报方案。客户一看,嗯,比较符合我们的需要,就买单了,但是需要这块那块修改一下。
修改一下?程序员头大了。这可不是一下的是,自己写的代码自己知道,自己怎么会在过去知道现在的事情呢?这个从来没有想过啊。但是客户的理由也很充足:“因为我们是这样这样的,所以我们的业务是那样那样的”。全程听完,嗯,也有道理。客户有不知道你过去的代码的来龙去脉,不就是多个查询么,不就是多显示个字段么,干吗说难呢,干吗说需要很长时间呢,干吗说改动很大呢?不理解。谁也理解不了,包括老板。
改呗。但是这个客户和过去的那个客户,在细节上有共性也有差异,怎么兼容这两家,毕竟以后还都要持续维护升级啊,如果维护两套,发现了BUG,这不得好多个版本进行修改和发布么?即使做成了DLL,代码也得改变,只不过不需要整个系统都编译更新罢了。没办法,增加配置参数,如果是1就那样处理如果是0就这样处理。
第三个客户又迎来了。完,絮絮叨叨说了一大堆,就是说,有个流程处理上和现有软件做法处理有矛盾。再增加配置参数呗。
代码中非常多的if..else,软件配置参数中非常多的配置参数,由于实施了客户多了,软件修改的多了,谁也记不起来为什么要这样修改,是应哪家客户的需求作的改动。尤其参数多了,而且不同的参数会影响多条业务处理流程,如果有9个参数,就如同有9个开关,这样开开关关就有很多种排列组合,最后软件走出来的业务流程连实施人员都不清楚该怎么配置才能适合当前这家客户。软件太难用了,咱们的软件太难用了。太难用了。
销售、实施、培训、支持,都在抱怨咱们的软件太烂了,根本卖不出去,卖一家就等于骗一家。
不行,这样做怎么能行呢,我们要重新完全开发一版,这次要设计的好好的,考虑的全全的,考虑全面了,我们这次开发出来的就一定很OK的。老板下了大令。
完全新开发的一版出炉了。给老客户升级,爽啊,很多流程通畅许多,到底是考虑全面了,这次有了很多的业务经验积累,都是过去咱们对客户业务理解不精深产生的问题。
欢喜啊。但没过多久,高兴不起来了。因为签到了新的客户,我们想塌脑子想出了99种各种业务情况,但是客户却属于第101种。见鬼了,怎么每个都是一个个案。是我们运气不好?我们可以说我们是全国最优秀的软件了,我的这个业务流程是聚集了全国几十家优秀成功案例客户经验开发而成,是最先进的最综合的。但客户说:“我这个需求能处理吗?”。一句话,干倒。
于是,新的一轮抱怨、压力、焦急、思考开始。有人半路跑路了,有人还在琢磨平台、设计模式、最先进的业务模式、最先进的盈利模式。
见鬼了。我们的小球哪里去了?我们讨论了大半天,我们的小球哪里去了?我们的SOA呢,我们的COM+呢,我们的MVC呢,我们的框架呢?我们为什么没有用SOA呢?我们为什么没有用EJB呢?我们为什么没有用COM+。
于是新一轮的完全版本开发又开始了,能有人走入这个循环的都已经是珍稀动物了,大量的人不会经历这么多完全重新开发,因为大量的IT公司被熬倒了。
我们这次不仅有101种业务场景,我们更有200种业务场景。这下大家该满意了吧。我们过去失败是由于我们没有平台没有SOA,现在我们用了,这下我们该成功了吧。这次我们可是下大血本啊。
于是,积累了数年上百家客户的200种业务场景被装进了SOA平台中,各种MVC、持久化、工作流、表单设计器,应用尽有。
见鬼,眼球掉地,第201种业务流程!需求这个大虫怎么打不死打不尽呢?
好不好改?回答曰:好改,我们都做活了,可以直接动态修改不需要编译就OK的。
NO,NO,NO。我要的是调整调整就OK的那种。回答曰:这个真的不行。
为什么呢?hang~~~。
一顿解释。无奈,继续重复轮回。(难道还要第四次完全重新开发?)
让我们回过头来,看看我们到底错在哪里了?我们什么都做了,怎么还是错?难道世间本无解?
我们再把开头的一段话放到这里:数字应用的世界里应该都是一个个的小球,代表着一个个简单的功能,几个小球组合起来,就是一个超级无敌的变形金刚。
我们总是走的太远,以致常常忘记了为什么要走。
大家再想想车(我们总是拿汽车做工业化流水开发最好的案例,我们这次就专门拿汽车做个好好的对比)。基本款的,基本款自动挡的,各种排量的,各种颜色的,自动挡或手自一体的,豪华款的,带GPS的,带六气囊的,带到车雷达的,等等等等。出一款车,往往能细分出多达十几种车型。就算你是个汽车改装爱好者,你想把这十几种车型每个优点都拿出来然后整一台总优秀的车,你都整不出来。很好理解,杨贵妃的眼睛西施的最貂蝉的鼻子昭君的眉,PS出来的肯定不是美女,而是一个四不像,怎么搞都变扭。
软件如车,也如PS。
真正的组件世界,大家好好看看facebook现在的插件思想,大家剖析一下facebook给这些插件提供了什么?
我们创造了无数的框架,为了解决一个又一个的问题。我们总是希望提供最高的灵活性来应对未来的未知。我们做的越多,反而我们限制的越多。我们为了做的最少,反而我们后来无从下手。
从统一论来看:SOA、业务开发平台、Open API、插件容器、javascript、URL、mashups,皆能合一。我历经架构、平台、中间件、组件、框架、各种重型设计模式与重型企业级大词,作为我个人,我仅仅只看到这一个观点。有时候,你负的重了,从反方向看,你会立马超然,原来风景还可以这样看。
谁是未来的架构哲学,谁是未来的盈利哲学,谁是未来的销售哲学,谁是未来的关系哲学?
哲人手指远方,目光深邃,说了一句:TMD。
2009年3月13 星期五
丁卯火(仲春)月 丁巳土娄满日
本日物候:仓庚鸣
岁煞东 蛇日冲(辛亥)猪
九星:九紫-天乙星(火)-吉神
宿名:西方娄金狗-吉 六曜:先負
值日:朱雀(黑道日) 五行:沙中土
彭祖百忌:[丁不剃头 巳不远行]
宜:祈福,祭祀,结亲,开市,交易
忌:服药,求医,栽种,动土,迁移
《走出软件作坊》网上订购:
互动网:http://www.china-pub.com/508874
卓越网:http://www.amazon.cn/mn/detailApp?prodid=bkbk812538&ref=GS_TS&uid=168-8093432-0389064
当当网:http://product.dangdang.com/product.aspx?product_id=20435119
分享到:
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
# 基于Qt框架的智能家居管理系统 ## 项目简介 本项目是一个基于Qt框架开发的智能家居管理系统,旨在提供一个集成的平台来监控和管理家庭环境中的各种传感器数据,如温度、湿度、烟雾状态、红外状态等。系统通过图形界面实时展示数据,并提供警报功能以应对异常情况。 ## 项目的主要特性和功能 1. 实时数据监控通过Qt和Qwt库创建的曲线图,实时显示温度和湿度数据。 2. 多传感器支持支持温度、湿度、烟雾、红外等多种传感器的监控。 3. 警报系统当传感器数据超过设定阈值时,系统会触发警报,并通过界面显示警告信息。 4. 用户交互提供滑动条和复选框,允许用户调整警报阈值或关闭警报。 5. 网络通信通过TCP套接字与服务器通信,获取和发送传感器数据及网络拓扑信息。 6. 蓝牙数据读取支持通过蓝牙读取传感器数据并更新界面显示。 ## 安装使用步骤 1. 环境准备 确保已安装Qt开发环境。 安装Qwt库以支持曲线图功能。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
基于springboot高性能计算中心的高性能集群共享平台源码数据库文档.zip
# 基于JavaFX的图片管理系统 ## 项目简介 本项目是一个基于JavaFX的图片管理系统,旨在提供一个用户友好的界面来管理和浏览图片。系统支持图片的预览、重命名、删除、复制、粘贴等操作,并提供了多种排序和展示方式。 ## 项目的主要特性和功能 1. 预览窗口 目录树展示 缩略图预览 单选、多选(Ctrl+左键)、框选功能 图片信息显示(如文件名、大小、最后修改时间等) 2. 右键菜单 复制粘贴图片 单选和多选重命名 删除图片 3. 展示窗口 图片放大缩小 左右切换图片 幻灯片播放功能 4. 排序功能 按文件名排序 按文件大小排序 按最后修改时间排序 5. 其他功能 图片信息封装(ImageBean) 文件树节点管理(FileTreeItem)
# 基于Windows窗体的披萨店厨房管理系统 ## 项目简介 这是一个基于Windows窗体的应用程序,主要用于披萨店的厨房管理。该系统通过WebSocket与服务器进行实时通信,显示从服务器接收到的订单信息。用户界面简洁明了,易于操作。 ## 项目的主要特性和功能 1. 实时通信: 通过WebSocket与服务器进行实时数据交换,获取订单信息。 2. 订单显示: 在窗体上实时显示订单信息,包括订单号和菜品等。 3. 界面简洁: 用户界面设计简洁,易于操作。 4. 定时刷新: 定时器用于定时从服务器获取消息,确保数据的实时性。 5. 错误处理: 在连接过程中遇到技术问题时会显示错误消息框。 6. 退出功能: 提供退出按钮,点击后程序会退出。 ## 安装和使用步骤 1. 下载项目源码文件: 从相关仓库或网站下载此项目的源码文件。 2. 准备开发环境: 确保你的开发环境已经安装了必要的软件和工具,如Visual Studio等。
基于springboot高校创新创业课程体系源码数据库文档.zip
基于springboot汽车美容与保养网站源码数据库文档.zip
基于springboot校友录管理系统源码数据库文档.zip
Cocos2d-x教程视频使用Eclipse在Ubuntu下搭建Cocos2d-x 3集成开发环境提取方式是百度网盘分享地址
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
基于springboot服装生产管理信息系统源码数据库文档.zip
# 基于Spring Boot和Redis的高并发秒杀系统 ## 项目简介 本项目是一个基于Spring Boot框架开发的高并发限时抢购秒杀系统。系统实现了基本的登录、查看商品列表、秒杀、下单等功能,并针对高并发场景进行了优化,包括系统缓存、降级和限流等措施。通过Redis、RabbitMQ等中间件技术,确保系统在高并发情况下的稳定性和性能。 ## 项目的主要特性和功能 ### 核心功能 用户登录用户可以通过手机号和密码进行登录,系统支持两次MD5加密确保密码安全。 商品列表展示用户可以查看所有商品的列表,包括商品的详细信息、库存数量、秒杀价格等。 商品详情展示用户可以查看单个商品的详细信息,包括秒杀状态和剩余时间。 秒杀下单用户可以参与秒杀活动,系统通过本地标记、Redis预处理、RabbitMQ异步下单等技术确保高并发下的系统稳定。 订单详情用户可以查看自己的订单详情,包括订单状态、商品信息等。 ### 技术优化
基于springboot校园论坛系统源码数据库文档.zip
飞利浦CT机自动推送配置
本教程介绍了 PHP 的基础语法、函数与面向对象编程、文件操作、以及与 MySQL 的交互。通过实例与练习,帮助您快速入门 PHP 开发,为动态网站和 Web 应用打下坚实基础。
# 基于Android的玩具租赁系统 ## 项目简介 本项目是一个基于Android平台的玩具租赁系统,旨在为用户提供一个便捷的玩具租赁服务。系统涵盖了用户注册、登录、玩具浏览、租赁、个人信息管理等功能,通过前后端分离的架构实现。 ## 项目的主要特性和功能 1. 用户管理 用户注册与登录支持通过昵称、手机号等多种方式进行注册和登录。 找回密码用户可以通过手机验证码找回密码。 个人信息管理用户可以修改个人信息,包括姓名、密码等。 2. 玩具租赁 玩具浏览用户可以浏览不同分类的玩具,查看玩具详情。 租赁功能用户可以选择玩具进行租赁,并查看租赁订单。 3. 搜索与推荐 搜索功能用户可以通过关键词搜索玩具。 推荐系统根据用户的历史行为推荐相关玩具。 4. 测试与集成 单元测试确保基础功能的正确性。 集成测试测试Spring Boot应用的上下文加载情况。
6个免费的所见即所得Markdown桌面编辑器的实用指南,用于在Windows平台上编写GitHub Readme.md文件(截至2024年9月)。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
# 基于Arduino IDE和Flutter的电动汽车充电监控系统 ## 一、项目简介 这是一个电动汽车充电监控项目,旨在通过Arduino IDE创建一个HTTP Web服务器,结合ESP32芯片、电源管理集成电路(IC)、电流和电压传感器,实现对电动汽车充电过程的实时监控和管理。同时,该项目还包括一个基于Flutter开发的移动应用,方便用户通过移动设备查看和控制充电过程。 ## 二、项目的主要特性和功能 1. HTTP Web服务器通过Arduino IDE创建HTTP Web服务器,实现与ESP32芯片的通信。 2. ESP32芯片连接WiFi,并作为中间设备连接电源管理集成电路(IC)、电流和电压传感器。 3. 远程监控与控制用户可以通过移动设备访问特定的网页,输入充电瓦数并提交,实现远程监控和控制充电过程。 4. Flutter应用项目中的Flutter应用提供了用户友好的界面,方便用户查看充电状态、调整充电参数等。