基于业务单元的开发与部署模式

简介:

许多的人注重开发效率,但是老鸟们不仅关注开发效率,更关注维护与技术支持效率,因为他们深深知道,一个有生命力的产品,维护与技术支持成本占整个产品开发运维成本的70%以上,也就是说开发成本只占不到30%的成本。

对于一个传统的MIS系统来说,别的不说,光数据库表结构的维护脚本就够受的了,设你的用户有几十家,或上百家,他们使用的版本可能是1.0到m.n中间的任何一个版本,设总共有x个版本。

这个时候一般有两种升级方法,一种是每做一个版本,就编写从前面任意一个版本到当前版本的升级脚本,这样脚本就有x套脚本,还要进行测试,如果这个时候还要跨数据库,比如:mysql,oracle,ms sql,informix,sybase,...,开发人员和测试人员无法承受之重,所以,按这种方法,工作量是越来越大,包袱越来越重。

那就说第二种方法,就是每次只做从上一个版本到当前版本的升级脚本。这种情况下,开发成本,测试成本可以相对得到较好的控制,但是升级的时候,就很麻烦了,需要识别当前用户的是哪个版本,然后再一个一个版本升上来,如果有自动化升级工具还好,如果没有的话,现场支持人员估计够受的,中间只出出现一点问题,可能就不知道后续应该如何处理了。

上面只说了数据库脚本,那么再说说程序,一般来说有个主线,还会有许多分支,根本不同用户购买的License不同,可能集成的内容也不一定相同,如果再有一些客户化开发,这里带来的问题,比数据脚本带来的问题还复杂。

曾经看到过某一团队,开发了一个系统,全在一个war工程中,结果就是开发效率低下,测试调试困难,没有人对整个系统全部熟悉。所以最后开发维护都无法维系,后续扩展无法继续,等待的结果就是一个,什么时候没有人能坚持的时候,它就可以死掉了。

所以,Tiny框架在设计之初,就在深入的思考这个问题。为此提出了业务单元的概念,就是把一个相对独立的模块合并为一个业务单元,一个业务单元包含了所以服务及界面展现以及数据初始化,数据库结构的各种资源及程序文件。

当然,业务单元也可以依赖其它的业务单元,如此就可以构建更大的系统及平台。在程序运行时,框架会读取BU中的数据库定义,初始化数据,等等,然后进行处理,保证不需要人工干预,就可以正确的运行。

这个时候,就实就引入了一个相当严重的问题,就是这些文件包含js,css,class,各种配置文件等等都放在java包,程序是怎么访问到它们的呢??为此我们做深入的扩展,使得各种资源都可以分散到jar包文件中,由此才得以实现模块化的需求。实际上模块化的想法很早就有,但是一直没有落地,就是因为资源文件方面的问题无法解决。

因此,解决了数据库初始化,菜单初始化,程序分解与集成等各种问题,程序员们要做的事情就是:我只要保证自己运行是正确的,整个系统就是运行正确的。不会因为是开发期、维护期,版本数多少影响到工作量。


相关文章
|
1月前
|
监控 虚拟化 云计算
从物理到云:使用自动化工具简化服务器迁移流程
【10月更文挑战第4天】随着云计算的快速发展,越来越多的企业选择将物理服务器迁移到云环境以提高效率和降低成本。本文详细介绍了使用自动化工具简化从物理到云的服务器迁移流程的技术实现细节,并提供了代码示例。
127 6
|
2月前
|
XML Java 数据库
在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
53 3
|
3月前
|
存储 容灾 Serverless
函数计算产品使用问题之如何实现跨区域协同工作的需求
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
Java Spring
通用研发提效问题之配置的若干场景下若干方案的变化该如何解决
通用研发提效问题之配置的若干场景下若干方案的变化该如何解决
|
4月前
|
存储 测试技术
软件交付问题之批处理任务为什么需要隔离环境,如何解决
软件交付问题之批处理任务为什么需要隔离环境,如何解决
|
4月前
|
存储 数据库
软件交付问题之关于数据存储层的编写,如何解决
软件交付问题之关于数据存储层的编写,如何解决
|
4月前
|
敏捷开发 运维 监控
微服务将大型应用拆分成小型自治服务,每个服务专注单一功能,独立部署。
【7月更文挑战第2天】微服务将大型应用拆分成小型自治服务,每个服务专注单一功能,独立部署。起源于对单体架构局限性的应对,它促进了敏捷开发、技术多样性及高可伸缩性。但同时也增加了系统复杂度、数据一致性和运维挑战。实施涉及服务划分、技术选型、CI/CD及监控。Netflix、Uber和Spotify的成功案例展示了微服务在应对高并发和快速迭代中的价值。尽管挑战重重,微服务仍是构建现代应用的关键。
138 2
|
4月前
|
开发者 Windows
三类代码协同模式问题之判断项目的协同规模决定采用集成分支问题如何解决
三类代码协同模式问题之判断项目的协同规模决定采用集成分支问题如何解决
|
6月前
|
设计模式 安全 Java
老系统重构系列--如何用一套流程接入所有业务线
**摘要:** 本文介绍了老系统改造的过程,作者提出,ToB业务的挑战在于需要支持多种差异化的业务需求,而模板模式在处理这种需求时可能会导致继承关系复杂和粒度过粗。为了解决这些问题,文章提出了以下步骤: 1. **梳理流程差异点**:识别不同业务流程的差异,以便确定扩展点。 2. **领域模型梳理**:区分核心域和支撑域,确保核心域的稳定性。 3. **二次抽象隔离层**:创建隔离层,避免核心域因新业务接入而变得不稳定。 4. **基于SPI的扩展体系建设**:选择了COLA-SPI实现扩展点,允许业务域定义接口并实现差异化的流程逻辑。
140 0
|
6月前
|
前端开发 Nacos 微服务
平台设计-部署模式
平台有多做部署模式
下一篇
无影云桌面