对业务建模

这不是什么新鲜话题,但是最近在维护一个之前同事遗留下来的项目,有了一些感想。其实我很久都不做具体的业务了。很长一段的时间主要在负责基础设施以及业务工具方面的开发,所以我做的事情,往往并不需要和具体的业务打交道,其实这样挺困难的,关键在于我并非设计者,设计者是其他的专职设计师,他学历高,工作时间也长,但是可惜的是,他在web系统的架构以及设计上并没有多少的经验,所以其实事情也挺难做的。

而现在接手的这个项目是一个很纯粹的业务系统,没有太多的自主设计,用的是标准javaEE的那一套,从技术上面来说是无可厚非的。但比较糟糕的是整个系统没有对业务进行建模,而是把业务分布在众多的RESTful API以及SQL语句上了。我觉得这其实是一种维护的灾难,太多的API把业务分割的支离破碎,根本不知道这些API什么用。系统的目录结构是按照技术来划分的,这种划分方法我必须吐槽一下,业务被隐藏在毫无意义的技术名词下面了,大大增加了人的理解难度。

所以我觉得应该对业务建模,至少在程序中能看到业务的脉络,而并非是一堆技术名词。而且这样也比较容易让人意识到各个业务模块之间的界限,不会把所谓的DAO什么的service什么的搞得过于的臃肿。之所以容易选择用技术名词来命名系统中的文件夹,我觉得主要是因为根据业务命名是比较困难的,这是因为:

  1. 业务总在发展和变化
  2. 业务没有明显的界限
  3. 业务之间总是相互牵连
  4. 无论业务多么的复杂,实现的技术总是不变的

似乎我们按照技术来组织我们的代码,也没有什么不对的。

所以组织代码有两种情况:

  1. 技术-》业务
  2. 业务-》技术

第一种方式最常见,使用spring的人一般都是这种风格。你会发现其代码结构中,顶级的文件夹命名都是技术名词,什么DAO,什么service之类的。一个业务相关的代码往往分散在这些文件夹里面的各个类中。这样的做的后果就是,永远不知道业务在哪里,看不见,摸不着。随着业务的变化这些文件夹中的内容都在变化不止,最终也无法抽象出一个模型以便重用。代码的复用性为:零。

这种代码里面随处可见大量注释掉的代码,以及各种补救措施。代码膨胀的速度惊人,一个巨大无比的焦油坑已经出现在不远的地方了。吐槽一下:在很久之前,我们学习UML的设计方法的时候,一定需要对业务建模的,后来有了EJB,这个也需要对业务建模。后来有了WEB系统的流行,以及Spring的出现。但不知道是哪个天才开始程序里面再也看不见业务模型了。业务是不可能消失的,不建模的一个重要原因是,这些业务可能十分的简单,但是它不可能永远都是简单的。特别是如果你希望积累或者希望复用的话。以技术为核心的这些项目被复用是十分困难的,因为你需要精心的拆解它们,和重做其实差不多了。

第二种方式,我觉得比较好。它有一个很重要的优点,就是可以复用。并且,从某种程度上来说,抽象的业务并不依赖具体的技术实现,这样对于业务的优化很有好处。此外,对于大多数的公司来说,业务才是真正有价值的东西,技术不是核心,技术仅仅是价值的载体,价值体现在业务里面。但是它有一个最大的缺点,就是难。对实现者要求很高,搞出一个很好的模型比较困难。就是这样。不是能够通过读书,读学位就能达到的,需要大量的实践,以及比较高的天赋。

时间: 2024-10-24 08:39:16

对业务建模的相关文章

软件项目需求开发过程实践之业务建模用例图

本次软件工程项目是重建办公业务流程管理平台,需要在继承原370个流程基础上,还需要提供快速流程开发能力,并要求体现出流程管理的规范性,以及流程的执行力.效率.效益,最终为企业管理创新提供流程再造的能力. 在项目前期及需求分析阶段,开发人员致力于"降低成本",以最小的代价完成项目,其可预见性的软件产品是经过系统平台升级的,并经过改良的第二个办公业务流程管理平台.按客户验收要求,"只能打60分,是不能给予验收". 在软件开发中,需求工作致力于解决"产品好卖&q

业务建模

ON/OFF机制 1.配置标准端对端业务 一般分为4个步骤: (1)定义应用 应用( Application)具体描述应用的动作,比如说 http 应用,规定了每次取得页面的大小和时间间隔:对于 ftp 应用,规定上传和下载的流量,文件的大小和产生的事件间隔. 打开应用配置器物件的属性对话框,可以看到OPNET 已经为我们定义了 9 种应用 以Database应用为例配置业务参数 Transaction Mix 代表查询数据量占整个输入交易量的比例,一般是查询一半,其他交易占一半: Transa

【DDD】业务建模实践 —— 发布帖子

本文是基于上一篇‘业务建模小招数’的实践,主要讲解‘发表帖子’场景的业务建模,包括:业务建模.业务模型.示例代码:示例代码会使用java编写,文末附有github地址.相比于<领域驱动设计>原书中的航运系统例子,社交服务系统的业务场景对于大家更加熟悉,相信更好理解.本文是[DDD]系列文章的第一篇,可参考:通过业务系统的重构实践DDD Round-I 业务建模 在大家的常识中,每个人都有自己的观点,并可以发表自己的观点,在社区中便表现为:发布帖子.那么谁发布帖子呢? 很明显是帖子作者,于是我们

业务建模 之 闲话&#39;闭包&#39;与&#39;原型继承&#39;

[引言]在业务建模中,我们经常遇到这样一种情况:“原型”对象负责实现业务的基本诉求(包括:有哪些属性,有哪些函数以及它们之间的关系),以“原型”对象为基础创建的“子对象”则实现一些个性化的业务特性,从而方便的实现业务扩展.最常见的搞法是: 1. 定义一个‘构造函数’,在其中实现属性的初始化,例如:var Person = function( ){};    //函数体中可以进行一些变量的初始化. 2. 再设置该函数的prototype成员,例如:Person.prototype = { goto

【DDD】业务建模实践 —— 删除帖子

本文是基于上一篇‘业务建模战术’的实践,主要讲解‘删除帖子’场景的业务建模,包括:业务建模.业务模型.示例代码:示例代码会使用java编写,文末附有github地址.相比于<领域驱动设计>原书中的航运系统例子,社交服务系统的业务场景对于大家更加熟悉,相信更好理解.本文是[DDD]系列文章的第一篇,可参考:通过业务系统的重构实践DDD 业务建模 这里的‘删除帖子’场景是指帖子作者主动删除帖子,至于管理员通过后台管理端下线帖子,我们认为该行为不同于‘删帖’,需要单独处理. 我们来分析下“删除帖子”

直播开始:&#39;云榨汁机&#39;诞生记--聊聊JavaScript中的&#39;业务建模&#39;

闭包是JavaScript中的一个重要特性,在之前的博文中,我们说闭包是一个'看似简单,其实很有内涵'的特性.当我们用JavaScript来实现相对复杂的业务建模时,我们可以如何利用'闭包'这个特性呢?JavaScript中的'原型继承',又可以解决业务建模中的哪些问题呢?今天我们就通过一家'榨汁机工厂'生产设计'榨汁机'的故事,来聊一聊'闭包'和'原型继承'在业务建模中的作用.现在直播开始: 1> 工厂默认选用A型刀头方案制造榨汁机 例子当中我们主要涉及到2个函数:1.榨汁机的生产工厂(Jui

【DDD】领域驱动设计实践 —— 业务建模小招数

本文结合团队在ECO(社区服务系统)业务建模过程中的实践经验,总结得到一些DDD业务建模的小招数,不一定是完美的,但是对我们团队来说很有效用,希望能帮到其他人.后面会陆续将项目中业务建模的一些经典例子放上来,分享给大家. ECO系统是线上旧系统,它的建模过程有别于新系统的业务建模.由于背着历史包袱,ECO的建模过程不是那么纯粹,很容易受到旧代码的影响,陷入代码的细节中,初期举步维艰,靠着小步快跑的方式得到了一些雏形和方法论,后面越来越顺,效果还是不错的. 本文为[DDD]系列文章中的其中一篇,其

EA业务建模实践之业务用例图

本文重点是业务建模实践,以及建模工具EA初级使用过程日志. 先前写了些文档,从不同角度描述了业务建模,但是条理性和规范性仍无法让人一目了然.春节期间当我再次读了<软件方法>前几章,产生了共鸣:误解随处都在,通过UML规范沟通环境,是辛勤汗水的教训. 按书中观点及回答问题如下: 业务建模:描述组织内部各系统(人肉系统.机械系统.电脑系统......)如何协作,使得组织可以为其他组织提供有价值的服务.新系统只不过是组织为了对外提供更好的服务,对自己的内部重新设计而购买的一个零件.组织引进一个软件系

业务建模 之 业务用例图

2018年02月12日 17:56:19 mydriverc2 阅读数:2283 http://www.uml.org.cn/oobject/201409112.asp 3.1 软件是组织的零件 业务建模的目的是从组织的角度来定位系统应该提供的价值,所以说“业务建模”这个名字其实起得不好,应该更名为“组织建模”.出于对过去叫法的尊重,本书依然称为“业务建模”.做一做以下题目,可能会发现答案出乎你的意料. 很多时候我们把自己在开发的系统(现在流行叫××平台了)看得太重了,感觉没有我们开发的系统,组