文档章节

对业务建模

崔钢
 崔钢
发布于 2015/06/24 23:31
字数 1349
阅读 211
收藏 12

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

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

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

  1. 业务总在发展和变化

  2. 业务没有明显的界限

  3. 业务之间总是相互牵连

  4. 无论业务多么的复杂,实现的技术总是不变的

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

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

  1. 技术-》业务

  2. 业务-》技术

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

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

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


© 著作权归作者所有

共有 人打赏支持
下一篇: 组合模式
崔钢
粉丝 171
博文 99
码字总数 59953
作品 0
西安
高级程序员
私信 提问
加载中

评论(2)

迷彩风情
迷彩风情
我同意楼主的说法,就应该从业务来进行,我们现在的项目都是这么干的,每个业务模块都能独立出来,同时也能和其他业务模块很好的集成和整合。
HonChy
HonChy
rest并非服务,核心是分离业务概念。rest资源对应业务概念。
浅谈数据仓库建设中的数据建模方法

原文:https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0803zhousb/   所谓水无定势,兵无常法。不同的行业,有不同行业的特点,因此,从业务角度看,其相应的数据模...

belovedmilan
2018/03/29
0
0
PowerDesigner 15—— 企业架构建模的原动力

一、 引言 正 如建筑蓝图是建设一座高楼大厦的基石一样,企业架构对一个企业的生存和发展具有同样至关重要的作用。随着企业的发展,企业的信息系统与业务关联越来越紧 密,信息系统的复杂度和...

红薯
2009/02/03
5.7K
0
业务建模是如何做的

业务建模是理解一个企业业务,对业务流程进行分析和优化的必要方法,看起来似乎很高大上,其实就像医学的人体模型一样,无非是一个能帮助工作的手段。 对于复杂的业务系统来说,比如电信的B...

俞庆
2015/02/26
0
0
数据库建模--PowerDesigner

PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。PowerDesigner 支...

匿名
2008/09/14
73.4K
5
DDD领域驱动设计 - 设计文档模板

原文:DDD领域驱动设计 - 设计文档模板 设计文档模板: 系统背景和定位 业务需求描述 领域语言整理,主要是整理领域中的各种术语的定义,名词解释 领域划分(分析出子域、核心域、支撑域) 系...

杰克.陈
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

matlab-自控原理 parallel 传递函数 并联

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclcnum1=[1 ......

志成就
20分钟前
0
0
Nginx负载均衡

Nginx负载均衡 负载均衡:负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。...

李超小牛子
25分钟前
0
0
ABUSE建了个恶意网站数据库

数据库已经按不同类型标记了各种恶意网站,例如它们当前是否在线,恶意内容类型,潜在威胁信息等。安全软件开发人员和浏览器开发人员可以免费使用此数据库来帮助用户拦截可能存在威胁的恶意网...

linuxCool
今天
2
0
【SQL】- 高级用法

数值和字符范围比较: between select *from books where price>=23.5 and price<=35; -- 等价于select *from books where price between 23.5 and 35; -- between包含边界的比较>= / <=......

ZeroneLove
今天
8
0
RabbitMQ如何解决各种情况下丢数据的问题

1.生产者丢数据 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Jav...

编程SHA
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部