当前位置: 首页 > 编程日记 > 正文

模块架构不是软件成功的“决定因素”


【本文是09年的一篇旧文,出于某些原因,对原文内容有删减,在这里整理后重新发表】

前言

感谢XXX对我们技术,对我们公司产品提出这些意见,我们公司卖的是软件产品,开发软件是一件技术活,说实话,要把技术上面的东西用非技术的语言来向大家交流,的确不是容易的事情。

架构的概念和架构的变迁

首先,“架构”一词我们技术和大家有不同的理解,从于冬琪提出的“平行架构”和“树形架构”的字面意思来理解,他(暂且用这个“他”而不是“她”,现在我们只见其声不见其人,不知者无罪,假设错了还请见谅:) )的关注点应该是“功能模块的组织结构”,我们先来看看这两种组织结构都有啥特点,为叙述方便,我们用一个公司的组织结构的发展变迁来说明这个问题。

某公司的组织架构例子

1,公司成立时期

甲、乙、丙 三人因为共同的兴趣和合适的时机凑到了一起,他们决定成立一个公司来卖产品。公司成立之初,没有任何自己的产品,只是大家都认为这个行业很有发展潜力,决定代销某公司的产品。这个时候,只要把产品销售出去即可,而公司的组织结构没有任何明确的结构,公司的所有经营事项三个人一起分担来做,包括行政,财务,销售等。

这个时候公司的实际组织结构为――无架构

2,公司初步发展:

在甲、乙、丙 三人共同的努力下,公司打开了市场,销售形势逐步好转,有了一定的原始积累,招聘了几个新人,公司确定了成立行政,财务,销售三个部门,甲负责行政,乙负责财务,丙负责销售,公司的整体运营仍然由三人共同负责。

这个时候公司的实际组织结构为――平行架构

3,公司快速发展:

经过数年的发展,公司逐步打开了国内市场,销售成果突飞猛进,公司取得了快速发展,员工超过了数百人,公司的组织结构分化为:

l 行政部――行政部,人事部,售后服务部;

l 财务部――财务部,税务部,合同部,资金部;

l 销售部――营销部,销售部,仓储部。

每一个部门设立一个部门经理,甲,乙,丙分任三大部门的副总经理,并且由甲兼任公司总经理。普通员工向部门经经理负责,部门经理向直属副总经理负责,副总经理向总经理负责。

这个时候公司的实际组织结构为――树形架构

4,公司发展到顶峰

经过10几年的发展,甲、乙、丙三人员来所在的公司已经发展到同行业第一企业,发展成了一个企业集团,集团下属有

l 技术研究院,

l 产品生产企业,

l 专业销售公司,

l 集团物流公司

l 集团总公司

l 。。。。。。

等数个公司和工厂,研究机构,发展成集“技,工,贸”一体的大型企业集团,集团各个下属企业独立运作,由集团总部综合管理,统一协调。

这个时候公司的实际组织结构为――平行架构+树形架构

(很多人认为这个时候还是树形结构,但这个时候集团各个企业是独立运作的,管理上是平级的,站在集团的层次看,它们之间是平行架购,而站在各个企业上门看,它们又都是树形架构的)

在现实社会中,很多公司都经历了上面类似的发展历程,从上面叙述的某个公司的发展历程来说,我们看到在公司发展的不同阶段,我们应该采用不同的“企业架构”,即可以没有任何架构,也可以有平行架购,再到树形架构,甚至是两种或多种架构并存。

架构变迁

俗话说,水无常形,兵无常势,任何事物的结构性态都不是固定的,都是根据当时的情况决定的,不能一开始就说它应该是某种形态,不应该是某种形态。事物的发展,社会的变迁,都是遵循一种“螺旋式上升”的道理,期间可能有种种曲折和反复,但大势如此,任何人都不能够阻止和改变!

XX的发展历程张鹏已经叙述的很清楚了,我们选择的“模块架构”事实上也遵循了从没有明确的架构,到平行架购,到树形架构的一个变迁(下文我会说FT其实已经是一个树形的功能模块架构),这中间也充满了曲折和反复,但是要求我们的软件从一开始就符合最理想的“树形架构”是不现实的,物越分越细,理越辩越明,如果有人一开始就能这么有先见,我只能说“神人啊”!

FT从总体功能模块上面,是一个树形结构(架构),但具体到某一个层次,它又是平行结构(架构)。基金类,理财诊断类,资讯类三大模块之间可以认为是平行结构,但它可能又不完全是,请看下图的

基金诊断用例:

数据架构

功能的实现是基于一套完善的数据的,同样这些数据的组织也是有结构的,如果大家非要问数据的组织是啥架构,那么我只能说它既不是平行架购,也不是树形架构,

这只是一个概念模型,实际上,每一部分的数据处理都是很复杂的,就拿基金基础数据集来说,它本身的处理就分为了原子层,指标层,展现层。

原子层

原始的数据,在FT/MB项目中使用的基金业务数据来自于“巨灵数据库”,我们需要在这样的数据上面进一步处理成我们自己的数据形式。这样原始的数据集合称为“原子层”;

指标层

对原子层的数据进行加工后的数据,它是单一的数据指标,存储的是每一个逻辑意义上面的,基本符合第3范式的数据,数据之间关系明确,没有冗余数据;也可以认为是符合“数据接口”的数据,这些“接口”便是一个个指标。

展现层

为方便客户端以更方便的方式使用数据,降低数据在客户端的处理量,我们可以将常用的数据的不同展现方式进行封装,例如建立一个视图,封装多个数据指标。

下图是基金基础数据分层关系图

总结

从产品的功能架购,到产品相关的数据架购,再到产品的应用架购,最后到整个公司的技术架购,甚至,还可以延伸到“企业架构”,“架构”一词在不同的层次,有不同的含义,具体到每一个层次,很难说这个架构应该是“平行架购”还是“树形架构”。

架构层次图:

正式由于FT的功能模块繁多,数据量大数据处理复杂,客户环境特殊,而且产品是逐步发展壮大的不是一开始就设计好的,才导致我们的软件显得有些“臃肿”,有些“笨拙”。当然,到了一定的阶段,我们有必要对“架构”进行重新梳理,但这是一个长期的,持续的,绝对不是一蹴而就的过程。

架构不是“决定因素”

但是,不管采用何种架构,要想使问题能够迅速高效的解决,这是不现实的,要不怎么会有这么多的企业管理书籍呢?怎么会有这么的软件架构设设计的书籍和讨论呢?真正想解决问题,那我们就不要把问题复杂化,拿我们的FT软件来说,如果要想让它“飞起来”,但又想保持这么多功能,这样的展现形式,是不可能的,也就是说问题的根源

不在于采用何种架构,而是我们能不能把问题找得简单点!

比如功能简单点,界面简单点,操作简单点,自然我们设计的软件也就是简单的,短小精悍的。

在这里我代表所有的程序员大声宣称:

我是一个懒惰的程序员,我不喜欢复杂!

理想归理想,事实归事实,我“懒惰”不代表我不想改变,我们一直在试图寻找一个好的解决方案,让我们的FT,MB飞起来,就像张鹏说的,FT,MB对我们来说,它们就是我们的孩子,我们一直都在试图努力让它们成长的更好!而根据前面的分析,现有的架构是由软件产品本身的复杂性和软件开发的过程特点决定的,“架构”只是其中的一个问题,不是决定性的问题。


    本文转自深蓝医生博客园博客,原文链接:http://www.cnblogs.com/bluedoctor/archive/2012/01/20/2328054.html,如需转载请自行联系原作者



相关文章:

JavaScript面向对象修改标签页详解

双击标签页组件中的li小标签或者section 中的文本,可以对文本进行编辑。为了实现这个功能,需要先给li和section元素绑定双击事件,当双击文本后,将文本改成一个文本框,用来输入新的内容,在文本框中显示原来的…

数据结构与算法:13 字符串与整数集合

13 字符串与整数集合 知识点: 1. 字符串 我们古人没有电影电视,没有游戏网络,所以文人们就会想出一些文字游戏来娱乐。比如宋代的李禺写了这样一首诗:“枯眼望遥山隔水,往来曾见几心知?壶空怕酌一杯酒&am…

是时候开始使用JavaScript严格模式了怎样启用javascri

E是时候开始使用JavaScript严格模式了怎样启用javascriCMAScript5将严格模式(strictmode)引入了Javascript中,目的是允许开发人员能够选择“更好”的Javascript版本,这个版本能用不同的方式处理那些普遍而又臭名昭著的错误。一开始的时候,我对…

Linux服务器日志备份到本地

1、确定线上服务器的日志文件名称和路径 2、一台本地服务器能连接公网,创建一个日志账户,设置密码 3、线上服务器要求: a、确定是否已安装sshpass包 [rootiZwz9ghdadtaey1msor7gnZ sh]# rpm -qa|grep sshpass sshpass-1.06-1.el7.x86_64 如不…

学习UI设计能做什么

UI设计这个岗位对于目前的很多企业来说是供不应求的,很多刚培训完UI设计的小伙伴,都不知道该如何定位自己的职能岗,那么学习UI设计能做什么呢?来看看下面小编的详细介绍就知道了。 学习UI设计能做什么? 1、图形设计/界面设计 软件产品的产品…

数据结构与算法:14 Leetcode同步练习(五)

Leetcode同步练习(五) 目录 题目01:用栈实现队列题目02:托普利茨矩阵题目03:罗马数字转整数题目04:最长公共前缀题目05:反转字符串题目06:无重复字符的最长子串题目07:…

Oracle Spatial构建自定义投影坐标系

之前项目换过服务器,移植数据库时候并没有正确完整的移植自定义的投影坐标系,结果就报出莫名其妙的一些错误,比如unable to transform rectangle due to: ORA-13199: SRID does not exist。 因为在移植坐标系的时候仅仅只是将MDSYS.SDO_CRS_C…

php.ini 中开启短标签

控制参数&#xff1a; short_open_tag On如果设置为Off&#xff0c;则不能正常解析类似于这样形式的php文件&#xff1a;<?phpinfo()?>而只能解析<?phpphpinfo()?>这样形式的php文件所以要想php支持短标签&#xff0c;需要我们把short_open_tag 设置为On. 本…

参加UI培训就业多长时间

​ UI设计在近几年的发展前景是非常好的&#xff0c;越来越多的人都想要学习UI设计&#xff0c;目前大家比较想了解的是参加UI培训就业多长时间?来看看下面的详细介绍。 参加UI培训就业多长时间? 如今市面上的UI设计培训机构很多&#xff0c;选择一个口碑好靠谱的培训机构学习…

数据结构与算法:15 树

15 树 知识结构&#xff1a; 1. 树的基本概念与术语 1.1 树的定义 树是N(N≥0)N(N \geq 0)N(N≥0)个结点组成的有穷集合 &#xff0c;该集合具有如下特征&#xff1a; &#xff08;1&#xff09;除N0N0N0的树外&#xff0c;有且仅有一个特定的称为根的结点。 &#xff08;…

【as3】键盘事件

在AS3中&#xff0c;键盘事件是由KeyboardEvent类来处理的&#xff0c;属于flash.events包里面&#xff0c;有两种类型的键盘事件&#xff1a;KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP&#xff0c;对于键的代码获得我们通过keyCode这个属性 其实键盘事件使用起来还是相…

在后台代码中引入XAML的方法

本文将介绍三种方法用于在后台代码中动态加载XAML&#xff0c;其中有两种方法是加载已存在的XAML文件&#xff0c;一种方法是将包含XAML代码的字符串转换为WPF的对象。 这些是我在编写RegeX时获得的经验&#xff0c;它们将会给WPF程序带来更多的灵活性。 一、在资源字典中载入项…

JavaScript面向对象怎样删除标签页?

单击小标签右上角的按钮可D头删除标签页。其开发思路是&#xff0c;为“x”元素绑定单击事件&#xff0c;事件触发后&#xff0c;通过父元素1i获取索弓引值&#xff0c;然后用这个索引值将对应的li和section删除&#xff0c;并在删除后更新标签页的选中效电下面我们们就开始进行…

数据结构与算法:16 Leetcode同步练习(六)

Leetcode同步练习&#xff08;六&#xff09; 目录 题目01&#xff1a;相同的树题目02&#xff1a;对称二叉树题目03&#xff1a;二叉树的最大深度题目04&#xff1a; Pow(x, n)题目05&#xff1a;子集题目06&#xff1a;格雷编码题目07&#xff1a;二叉树的最近公共祖先题目…

Apache启动时报Could not reliably determine the server's fully qualified domain name

在系统启动时apache&#xff0c;没有启动起来&#xff0c;查看“事件查看器”发现报一些错误&#xff1a; The Apache service named reported the following error:>>> httpd.exe: Could not reliably determine the servers fully qualified domain name, using 19…

Windows Phone SDK update for Windows Phone 7.8

下载&#xff1a;http://www.microsoft.com/en-us/download/details.aspx?id36474 (在线安装) http://kuai.xunlei.com/d/cHbJCAIX4wBNVgFR5aa (离线下载 全语言 5.5G....) MS博客介绍&#xff1a;http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/01/22/now-a…

作为一名合格的前端开发工程师需要会哪些

作为一名合格的前端开发工程师需要会哪些?web前端要学习的内容有很多&#xff0c;想要成为一名合格的web前端工程师&#xff0c;综合实力是要非常强的&#xff0c;来看看下面的详细介绍吧。 作为一名合格的前端开发工程师需要会哪些?前端开发工程师不仅要掌握基本的前端开发技…

memcached部署

第1章 memcached 1 memcached前言 1.1 memcached诞生的原因 2003年诞生了memcached Web1.0 2005以前 企业提供内容为主。 Web2.02005-2012 企业只提供平台&#xff0c;用户参与上传下载内容。 memcached 内存缓存软件&#xff0c;内存比磁盘快。 传统场景中&#xff0c;多数…

线性代数:第二章 矩阵及其运算

本讲义是自己上课所用幻灯片&#xff0c;里面没有详细的推导过程&#xff08;笔者板书推导&#xff09;只以大纲的方式来展示课上的内容&#xff0c;以方便大家下来复习。 本章主要介绍有关矩阵的知识&#xff0c;主要包括矩阵的基本运算&#xff08;加法、数乘、乘法、乘幂、…

sdut 2401 最大矩形面积

1http://acm.sdut.edu.cn/sdutoj/problem.php?actionshowproblem&problemid2401 /*2 最大矩形面积&#xff0c;把边界点加上3 从左往右 处理一遍&#xff1b;4 再从上往下处理一遍&#xff1b;5 */6 7 #include<stdio.h>8 #define maxn 200009 #include<cmath>…

Python中怎样改变集合之间的关系?

Python中怎样改变集合之间的关系?数学中&#xff0c;两个集合关系的常见操作包括&#xff1a;交集、并集、差集、补集。设A&#xff0c;B是两个集合&#xff0c;集合关系的操作介绍如下&#xff1a; 交集是指属于集合A且属于集合B的元素所组成的集合&#xff0c; 并集是指集合…

数据结构与算法:17 图

17 图 知识结构&#xff1a; 1. 图的基本概念与术语 1.1 图的定义 图由顶点集和边集组成&#xff0c;记为G(V,E)G(V,E)G(V,E)。 顶点集&#xff1a;顶点的有穷非空集合&#xff0c;记为V(G)V(G)V(G)。边集&#xff1a;顶点偶对的有穷集合&#xff0c;记为E(G)E(G)E(G) 。 …

云计算安全:技术与应用

云计算安全&#xff1a;技术与应用中国电信网络安全实验室 编著ISBN 978-7-121-14409-72012年1月出版定价&#xff1a;59.00元16开236页宣传语&#xff1a;全面了解云计算安全风险、安全防护手段的佳作&#xff01;内 容 简 介随着云计算的兴起&#xff0c;安全成为云计算能否顺…

再谈HOST文件

前几天弄了一个关于禁止打开某个网站的文章后&#xff0c;觉得这个HOST文件真的挺有意思的。并且也总是想把自己对它新的理解写下来&#xff08;也许大家都明白了&#xff09;以下是HOST文件的内容&#xff1a;# Copyright (c) 1993-1999 Microsoft Corp.## This is a sample H…

PMP®考试是什么机构

项目管理对于很多职场中的人来说是以后要发展的一个方向&#xff0c;随着各职业内卷也越来越严重&#xff0c;pmp认证引起了大家的关注&#xff0c;有朋友问&#xff1a;PMP考试是什么机构?下面我们给大家介绍一下。 PMP考试是什么机构?PMP考试认证在我国大陆地区需要三方机构…

技术图文:03 结构型设计模式(上)

结构型设计模式&#xff08;上&#xff09; 本教程主要介绍一系列用于如何将现有类或对象组合在一起形成更加强大结构的经验总结。 知识结构&#xff1a; 享元模式 – 实现对象的复用 Sunny 软件公司欲开发一个围棋软件&#xff0c;其界面效果如下图所示&#xff1a; 图2 围…

Linux抓包工具tcpdump详解

原文链接 tcpdump是一个用于截取网络分组&#xff0c;并输出分组内容的工具&#xff0c;简单说就是数据包抓包工具。tcpdump凭借强大的功能和灵活的截取策略&#xff0c;使其成为Linux系统下用于网络分析和问题排查的首选工具。 tcpdump提供了源代码&#xff0c;公开了接口&…

学习笔记TF065:TensorFlowOnSpark

2019独角兽企业重金招聘Python工程师标准>>> Hadoop生态大数据系统分为Yam、 HDFS、MapReduce计算框架。TensorFlow分布式相当于MapReduce计算框架&#xff0c;Kubernetes相当于Yam调度系统。TensorFlowOnSpark&#xff0c;利用远程直接内存访问(Remote Direct Memo…

HTML5培训好不好

HTML5培训好不好?这个问题&#xff0c;要看你选择的培训机构&#xff0c;想要学习HTML5技术&#xff0c;靠谱的培训机构非常重要&#xff0c;下面我们就来看看详细的介绍吧。 HTML5培训好不好?从前端开发的基础出发&#xff0c;学习使用HTML&#xff0c;CSS&#xff0c;JavaS…

技术图文:03 结构型设计模式(下)

结构型设计模式&#xff08;下&#xff09; 本教程主要介绍一系列用于如何将现有类或对象组合在一起形成更加强大结构的经验总结。 知识结构&#xff1a; 组合模式 – 树形结构的处理 Sunny 软件公司欲开发一个杀毒&#xff08;AntiVirus&#xff09;软件&#xff0c;该软件…