读易[8]·八卦一下三层架构

来源:互联网 发布:linux文件上传下载 编辑:程序博客网 时间:2024/05/22 04:27

三层架构是我们设计复杂的企业应用的一个最基本的分层结构了。下面试图阐述一下三层架构的基本特性。并且结合易经的知识来帮助我们理清思路,更好地看到三层架构的本质。

这里要向大家推荐Martin Fowler写的《企业应用架构模式》,里面对三层架构有很清楚的解释了。

一、三层架构

在分解复杂的软件系统时,我们常用的技术之一就是分层。计算机世界中大量使用分层,比如说从应用软件、操作系统到硬件层;另外还有大家都熟悉的TCP/IP架构。分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。

我们这里着重要分析的是三层架构。三层架构分为:表现层、领域层、数据源层。

表现层提供服务,显示信息,处理用户请求,HTTP请求,命令行调用,批处理API。
领域层包含业务逻辑,系统中真正的核心。
数据源层处理与数据库、消息系统、事务管理器及其他软件包通信。

提一下,这里的分层指的是逻辑上的分层,和系统部署在几台机器上并没有关系。另外还存在着物理上的分离,这个就不再讨论范围之内了,强调一下避免有人混淆。

二、三才之道

接下来说重点。《道德经》中的一句话“道生一,一生二,二生三,三生万物”,这个观点是从《易经》中来的,所以借用这句话来引出“三才”的概念。首先从无生有,出来那个一,叫做太极。太极生两仪,一分为二有了阴阳。阴阳调和出来三,于是有了不阴不阳的东西“和”。

大家肯定听过盘古开天地的传说,盘古一把斧头劈过去,清的上升变成了天,浊的下降变成了地,处于清浊之间的就成了天地万物。也就是说“三才”指的就是天、地、人。分别代表的是清、浊、和。

三、软件中的三才

可以将软件中的三层架构用三才的角度来分析。表现层为天,数据层为地,领域层为人,这样三层架构中的每一层就有了独特的属性与含义。

3.1 数据是根本

我们的软件从本质上来说都是在处理数据,数据对于用户来说就是信息、是价值。

上次参加一个架构师培训的时候,老师给我们举了一个例子。三峡工程需要做一个项目,这个肥差当然有很多软件公司抢着要。但其中有一家软件公司曾经给三峡工程做数据库,他们掌握着所有的数据信息。这样一来,其他公司的机会就微乎其微了。整个数据都掌握在别人手里,再去和他竞争是没有任何意思的。最终的结果也是这家掌握了数据主动权的公司拿到了项目。

现在国内有不少软件公司发展得不错,尤其是在做行业软件的时候。一些有实力的人都争先恐后地提出标准,就是些数据标准。如果这样的标准在行业内得到认可的话,这家公司可以说是立于不败之地了。由此可见数据的重要。

数据层为地,它具有大地“厚德载物”的特性。它是整个软件的立命所在,这层的好坏直接影响到整个软件体系。

3.2 用户是上帝

表现层是用户直接接触的软件模块。用户是上帝,今后面向服务的产业模式更好地突出了这句话的含义。

有很多人专门研究人机交互,他们的工作就是研究表现层的设计了。

敏捷是非常好的思想。其中敏捷的核心是迭代,迭代的核心是用户。敏捷之所以能更加成功,关键点就在于它把握住了软件中的核心——用户。表现层直接和用户打交道,所以它的主要职责就是满足用户的需求,将功能以最合适的方式展现给用户。

表现层为天。《易经》中说“天尊地卑”。这有两种含义,一是,天高高在上,我们需要用尊重的态度去对待,一切都是用户至上;另外天为什么尊贵,那是因为它离我们最远,说地卑并不是说他不重要,而是说地离我们最近也最亲近。用户离我们是非常远的,当我们注意到这点后在行动上就要有所不同了,比如说XP中提倡的“客户参与”就表明XP大师们知道这点。

3.3 万物之灵最难为

在学校或者刚进入公司的时候,写程序更加关注界面的实现,一看到漂亮的界面就会去研究它是怎么实现的,然后迫不及待地想加到自己的程序中。

等到真正成为一个职业的程序员后才会明白,软件中的核心不在界面,其实也不在数据层,而是在领域层。领域层中包含的是绝大多数用户需求的实现。单凭这点,领域层在软件中的位置就不言而喻了。

领域层是人,人是天地之间的万物之灵,是阴阳调和的产物。为什么说领域层是人呢?做人有一点非常关键——变通。人是一切社会关系的总和,如果一个人不懂得变通,那么他是很难在社会上生存下去的。

领域层同样也需要有变通的性质。用户需求变化,我们的软件就必须要改,这个叫做变。变完之后我们还需要有大量的时间来维护,怎样降低维护成本呢,需要我们有一个良好的设计,这个叫做通。我们不管是在最初设计领域层,还是以后不断维护它的时候都需要注意“变通”。

不变不通,那这个软件基本上就废掉了。很多时候我们的软件需要做新版本,当然一方面是想收用户的升级费,另外更要紧的是因为以前的版本“不变不通”了。用户的新需求加不上去,维护成本惊人。算了,新做一个吧。如果我们在维护的时候也能注意变通的话,软件的生命周期应该会长得多。

领域层是“人”,人是万物之灵,真是“万物之灵最难为”。

四、软件中的阴阳

阴阳变化乃生万物。任何事物中都有阴阳,那就看我们怎么分析了。

拿阴阳之说来阐述软件,我好像是有史以来第一人,没有见过其他的资料,如果有朋友发现在这篇文章之前还有高人这样做过,恳请告知,我一定要去拜读。

对于软件来说,有两端需要我们注意。一个是用户、一个是数据(二进制的、文本的、图片的、数据库的)。所有的软件都在做同样一件事情,没有第二件。软件都在处理用户和数据的关系。

用户为乾(阳)、数据为坤(阴)。我们的软件就是在阴阳之间调和。将用户和冷冰冰的数据联系起来就是我们做软件的宗旨。

五、不一定需要三层

前面介绍了三层架构。但不是所有的软件都需要三层。拿到一个系统,二话不说就来三层,这样做是非常错误的。

有的软件特别简单,一层就搞定了,还分什么,徒增麻烦。有的软件用BS结构搞定的非常漂亮,没有其他的需求的话非搞出一个第三层也是亏本的买卖。

对于复杂的软件来说,三层就是一个比较好的解决方法了。另外还有其他的一些分层方式。

Brown提出的五层,表现层、控制层、领域层、数据映射层、数据源层。
Core J2EE的五层,客户层、表现层、业务层、集成层、资源层。
Microsoft的DNA架构,表现层,业务层,数据访问层。

还有很多,就不一一举例了。

大家看看上面这些分层架构,其实不管多么复杂,都是阴阳(用户到数据)的相互调和,所以“二生三,三生万物”。当我们把根本的东西掌握住之后,不管万物怎样变化,都是可以被我们认知、掌握的。

PS:这篇文章写出来后非常担心网友们觉得写得太肤浅。万事开头难,有了这个想法我一定会坚持不懈地研究下去的。现在只好请诸位忍耐忍耐,多看看在下的几篇拙文。衷心感谢那些批评的、给我建议的朋友们。以后也请大家多多批评指正。 




三层架构是我们设计复杂的企业应用的一个最基本的分层结构了。下面试图阐述一下三层架构的基本特性。并且结合易经的知识来帮助我们理清思路,更好地看到三层架构的本质。

这里要向大家推荐Martin Fowler写的《企业应用架构模式》,里面对三层架构有很清楚的解释了。

一、三层架构

在分解复杂的软件系统时,我们常用的技术之一就是分层。计算机世界中大量使用分层,比如说从应用软件、操作系统到硬件层;另外还有大家都熟悉的TCP/IP架构。分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。

我们这里着重要分析的是三层架构。三层架构分为:表现层、领域层、数据源层。

表现层提供服务,显示信息,处理用户请求,HTTP请求,命令行调用,批处理API。
领域层包含业务逻辑,系统中真正的核心。
数据源层处理与数据库、消息系统、事务管理器及其他软件包通信。

提一下,这里的分层指的是逻辑上的分层,和系统部署在几台机器上并没有关系。另外还存在着物理上的分离,这个就不再讨论范围之内了,强调一下避免有人混淆。

二、三才之道

接下来说重点。《道德经》中的一句话“道生一,一生二,二生三,三生万物”,这个观点是从《易经》中来的,所以借用这句话来引出“三才”的概念。首先从无生有,出来那个一,叫做太极。太极生两仪,一分为二有了阴阳。阴阳调和出来三,于是有了不阴不阳的东西“和”。

大家肯定听过盘古开天地的传说,盘古一把斧头劈过去,清的上升变成了天,浊的下降变成了地,处于清浊之间的就成了天地万物。也就是说“三才”指的就是天、地、人。分别代表的是清、浊、和。

三、软件中的三才

可以将软件中的三层架构用三才的角度来分析。表现层为天,数据层为地,领域层为人,这样三层架构中的每一层就有了独特的属性与含义。

3.1 数据是根本

我们的软件从本质上来说都是在处理数据,数据对于用户来说就是信息、是价值。

上次参加一个架构师培训的时候,老师给我们举了一个例子。三峡工程需要做一个项目,这个肥差当然有很多软件公司抢着要。但其中有一家软件公司曾经给三峡工程做数据库,他们掌握着所有的数据信息。这样一来,其他公司的机会就微乎其微了。整个数据都掌握在别人手里,再去和他竞争是没有任何意思的。最终的结果也是这家掌握了数据主动权的公司拿到了项目。

现在国内有不少软件公司发展得不错,尤其是在做行业软件的时候。一些有实力的人都争先恐后地提出标准,就是些数据标准。如果这样的标准在行业内得到认可的话,这家公司可以说是立于不败之地了。由此可见数据的重要。

数据层为地,它具有大地“厚德载物”的特性。它是整个软件的立命所在,这层的好坏直接影响到整个软件体系。

3.2 用户是上帝

表现层是用户直接接触的软件模块。用户是上帝,今后面向服务的产业模式更好地突出了这句话的含义。

有很多人专门研究人机交互,他们的工作就是研究表现层的设计了。

敏捷是非常好的思想。其中敏捷的核心是迭代,迭代的核心是用户。敏捷之所以能更加成功,关键点就在于它把握住了软件中的核心——用户。表现层直接和用户打交道,所以它的主要职责就是满足用户的需求,将功能以最合适的方式展现给用户。

表现层为天。《易经》中说“天尊地卑”。这有两种含义,一是,天高高在上,我们需要用尊重的态度去对待,一切都是用户至上;另外天为什么尊贵,那是因为它离我们最远,说地卑并不是说他不重要,而是说地离我们最近也最亲近。用户离我们是非常远的,当我们注意到这点后在行动上就要有所不同了,比如说XP中提倡的“客户参与”就表明XP大师们知道这点。

3.3 万物之灵最难为

在学校或者刚进入公司的时候,写程序更加关注界面的实现,一看到漂亮的界面就会去研究它是怎么实现的,然后迫不及待地想加到自己的程序中。

等到真正成为一个职业的程序员后才会明白,软件中的核心不在界面,其实也不在数据层,而是在领域层。领域层中包含的是绝大多数用户需求的实现。单凭这点,领域层在软件中的位置就不言而喻了。

领域层是人,人是天地之间的万物之灵,是阴阳调和的产物。为什么说领域层是人呢?做人有一点非常关键——变通。人是一切社会关系的总和,如果一个人不懂得变通,那么他是很难在社会上生存下去的。

领域层同样也需要有变通的性质。用户需求变化,我们的软件就必须要改,这个叫做变。变完之后我们还需要有大量的时间来维护,怎样降低维护成本呢,需要我们有一个良好的设计,这个叫做通。我们不管是在最初设计领域层,还是以后不断维护它的时候都需要注意“变通”。

不变不通,那这个软件基本上就废掉了。很多时候我们的软件需要做新版本,当然一方面是想收用户的升级费,另外更要紧的是因为以前的版本“不变不通”了。用户的新需求加不上去,维护成本惊人。算了,新做一个吧。如果我们在维护的时候也能注意变通的话,软件的生命周期应该会长得多。

领域层是“人”,人是万物之灵,真是“万物之灵最难为”。

四、软件中的阴阳

阴阳变化乃生万物。任何事物中都有阴阳,那就看我们怎么分析了。

拿阴阳之说来阐述软件,我好像是有史以来第一人,没有见过其他的资料,如果有朋友发现在这篇文章之前还有高人这样做过,恳请告知,我一定要去拜读。

对于软件来说,有两端需要我们注意。一个是用户、一个是数据(二进制的、文本的、图片的、数据库的)。所有的软件都在做同样一件事情,没有第二件。软件都在处理用户和数据的关系。

用户为乾(阳)、数据为坤(阴)。我们的软件就是在阴阳之间调和。将用户和冷冰冰的数据联系起来就是我们做软件的宗旨。

五、不一定需要三层

前面介绍了三层架构。但不是所有的软件都需要三层。拿到一个系统,二话不说就来三层,这样做是非常错误的。

有的软件特别简单,一层就搞定了,还分什么,徒增麻烦。有的软件用BS结构搞定的非常漂亮,没有其他的需求的话非搞出一个第三层也是亏本的买卖。

对于复杂的软件来说,三层就是一个比较好的解决方法了。另外还有其他的一些分层方式。

Brown提出的五层,表现层、控制层、领域层、数据映射层、数据源层。
Core J2EE的五层,客户层、表现层、业务层、集成层、资源层。
Microsoft的DNA架构,表现层,业务层,数据访问层。

还有很多,就不一一举例了。

大家看看上面这些分层架构,其实不管多么复杂,都是阴阳(用户到数据)的相互调和,所以“二生三,三生万物”。当我们把根本的东西掌握住之后,不管万物怎样变化,都是可以被我们认知、掌握的。

PS:这篇文章写出来后非常担心网友们觉得写得太肤浅。万事开头难,有了这个想法我一定会坚持不懈地研究下去的。现在只好请诸位忍耐忍耐,多看看在下的几篇拙文。衷心感谢那些批评的、给我建议的朋友们。以后也请大家多多批评指正。 




三层架构是我们设计复杂的企业应用的一个最基本的分层结构了。下面试图阐述一下三层架构的基本特性。并且结合易经的知识来帮助我们理清思路,更好地看到三层架构的本质。

这里要向大家推荐Martin Fowler写的《企业应用架构模式》,里面对三层架构有很清楚的解释了。

一、三层架构

在分解复杂的软件系统时,我们常用的技术之一就是分层。计算机世界中大量使用分层,比如说从应用软件、操作系统到硬件层;另外还有大家都熟悉的TCP/IP架构。分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。

我们这里着重要分析的是三层架构。三层架构分为:表现层、领域层、数据源层。

表现层提供服务,显示信息,处理用户请求,HTTP请求,命令行调用,批处理API。
领域层包含业务逻辑,系统中真正的核心。
数据源层处理与数据库、消息系统、事务管理器及其他软件包通信。

提一下,这里的分层指的是逻辑上的分层,和系统部署在几台机器上并没有关系。另外还存在着物理上的分离,这个就不再讨论范围之内了,强调一下避免有人混淆。

二、三才之道

接下来说重点。《道德经》中的一句话“道生一,一生二,二生三,三生万物”,这个观点是从《易经》中来的,所以借用这句话来引出“三才”的概念。首先从无生有,出来那个一,叫做太极。太极生两仪,一分为二有了阴阳。阴阳调和出来三,于是有了不阴不阳的东西“和”。

大家肯定听过盘古开天地的传说,盘古一把斧头劈过去,清的上升变成了天,浊的下降变成了地,处于清浊之间的就成了天地万物。也就是说“三才”指的就是天、地、人。分别代表的是清、浊、和。

三、软件中的三才

可以将软件中的三层架构用三才的角度来分析。表现层为天,数据层为地,领域层为人,这样三层架构中的每一层就有了独特的属性与含义。

3.1 数据是根本

我们的软件从本质上来说都是在处理数据,数据对于用户来说就是信息、是价值。

上次参加一个架构师培训的时候,老师给我们举了一个例子。三峡工程需要做一个项目,这个肥差当然有很多软件公司抢着要。但其中有一家软件公司曾经给三峡工程做数据库,他们掌握着所有的数据信息。这样一来,其他公司的机会就微乎其微了。整个数据都掌握在别人手里,再去和他竞争是没有任何意思的。最终的结果也是这家掌握了数据主动权的公司拿到了项目。

现在国内有不少软件公司发展得不错,尤其是在做行业软件的时候。一些有实力的人都争先恐后地提出标准,就是些数据标准。如果这样的标准在行业内得到认可的话,这家公司可以说是立于不败之地了。由此可见数据的重要。

数据层为地,它具有大地“厚德载物”的特性。它是整个软件的立命所在,这层的好坏直接影响到整个软件体系。

3.2 用户是上帝

表现层是用户直接接触的软件模块。用户是上帝,今后面向服务的产业模式更好地突出了这句话的含义。

有很多人专门研究人机交互,他们的工作就是研究表现层的设计了。

敏捷是非常好的思想。其中敏捷的核心是迭代,迭代的核心是用户。敏捷之所以能更加成功,关键点就在于它把握住了软件中的核心——用户。表现层直接和用户打交道,所以它的主要职责就是满足用户的需求,将功能以最合适的方式展现给用户。

表现层为天。《易经》中说“天尊地卑”。这有两种含义,一是,天高高在上,我们需要用尊重的态度去对待,一切都是用户至上;另外天为什么尊贵,那是因为它离我们最远,说地卑并不是说他不重要,而是说地离我们最近也最亲近。用户离我们是非常远的,当我们注意到这点后在行动上就要有所不同了,比如说XP中提倡的“客户参与”就表明XP大师们知道这点。

3.3 万物之灵最难为

在学校或者刚进入公司的时候,写程序更加关注界面的实现,一看到漂亮的界面就会去研究它是怎么实现的,然后迫不及待地想加到自己的程序中。

等到真正成为一个职业的程序员后才会明白,软件中的核心不在界面,其实也不在数据层,而是在领域层。领域层中包含的是绝大多数用户需求的实现。单凭这点,领域层在软件中的位置就不言而喻了。

领域层是人,人是天地之间的万物之灵,是阴阳调和的产物。为什么说领域层是人呢?做人有一点非常关键——变通。人是一切社会关系的总和,如果一个人不懂得变通,那么他是很难在社会上生存下去的。

领域层同样也需要有变通的性质。用户需求变化,我们的软件就必须要改,这个叫做变。变完之后我们还需要有大量的时间来维护,怎样降低维护成本呢,需要我们有一个良好的设计,这个叫做通。我们不管是在最初设计领域层,还是以后不断维护它的时候都需要注意“变通”。

不变不通,那这个软件基本上就废掉了。很多时候我们的软件需要做新版本,当然一方面是想收用户的升级费,另外更要紧的是因为以前的版本“不变不通”了。用户的新需求加不上去,维护成本惊人。算了,新做一个吧。如果我们在维护的时候也能注意变通的话,软件的生命周期应该会长得多。

领域层是“人”,人是万物之灵,真是“万物之灵最难为”。

四、软件中的阴阳

阴阳变化乃生万物。任何事物中都有阴阳,那就看我们怎么分析了。

拿阴阳之说来阐述软件,我好像是有史以来第一人,没有见过其他的资料,如果有朋友发现在这篇文章之前还有高人这样做过,恳请告知,我一定要去拜读。

对于软件来说,有两端需要我们注意。一个是用户、一个是数据(二进制的、文本的、图片的、数据库的)。所有的软件都在做同样一件事情,没有第二件。软件都在处理用户和数据的关系。

用户为乾(阳)、数据为坤(阴)。我们的软件就是在阴阳之间调和。将用户和冷冰冰的数据联系起来就是我们做软件的宗旨。

五、不一定需要三层

前面介绍了三层架构。但不是所有的软件都需要三层。拿到一个系统,二话不说就来三层,这样做是非常错误的。

有的软件特别简单,一层就搞定了,还分什么,徒增麻烦。有的软件用BS结构搞定的非常漂亮,没有其他的需求的话非搞出一个第三层也是亏本的买卖。

对于复杂的软件来说,三层就是一个比较好的解决方法了。另外还有其他的一些分层方式。

Brown提出的五层,表现层、控制层、领域层、数据映射层、数据源层。
Core J2EE的五层,客户层、表现层、业务层、集成层、资源层。
Microsoft的DNA架构,表现层,业务层,数据访问层。

还有很多,就不一一举例了。

大家看看上面这些分层架构,其实不管多么复杂,都是阴阳(用户到数据)的相互调和,所以“二生三,三生万物”。当我们把根本的东西掌握住之后,不管万物怎样变化,都是可以被我们认知、掌握的。

PS:这篇文章写出来后非常担心网友们觉得写得太肤浅。万事开头难,有了这个想法我一定会坚持不懈地研究下去的。现在只好请诸位忍耐忍耐,多看看在下的几篇拙文。衷心感谢那些批评的、给我建议的朋友们。以后也请大家多多批评指正。 




三层架构是我们设计复杂的企业应用的一个最基本的分层结构了。下面试图阐述一下三层架构的基本特性。并且结合易经的知识来帮助我们理清思路,更好地看到三层架构的本质。

这里要向大家推荐Martin Fowler写的《企业应用架构模式》,里面对三层架构有很清楚的解释了。

一、三层架构

在分解复杂的软件系统时,我们常用的技术之一就是分层。计算机世界中大量使用分层,比如说从应用软件、操作系统到硬件层;另外还有大家都熟悉的TCP/IP架构。分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。

我们这里着重要分析的是三层架构。三层架构分为:表现层、领域层、数据源层。

表现层提供服务,显示信息,处理用户请求,HTTP请求,命令行调用,批处理API。
领域层包含业务逻辑,系统中真正的核心。
数据源层处理与数据库、消息系统、事务管理器及其他软件包通信。

提一下,这里的分层指的是逻辑上的分层,和系统部署在几台机器上并没有关系。另外还存在着物理上的分离,这个就不再讨论范围之内了,强调一下避免有人混淆。

二、三才之道

接下来说重点。《道德经》中的一句话“道生一,一生二,二生三,三生万物”,这个观点是从《易经》中来的,所以借用这句话来引出“三才”的概念。首先从无生有,出来那个一,叫做太极。太极生两仪,一分为二有了阴阳。阴阳调和出来三,于是有了不阴不阳的东西“和”。

大家肯定听过盘古开天地的传说,盘古一把斧头劈过去,清的上升变成了天,浊的下降变成了地,处于清浊之间的就成了天地万物。也就是说“三才”指的就是天、地、人。分别代表的是清、浊、和。

三、软件中的三才

可以将软件中的三层架构用三才的角度来分析。表现层为天,数据层为地,领域层为人,这样三层架构中的每一层就有了独特的属性与含义。

3.1 数据是根本

我们的软件从本质上来说都是在处理数据,数据对于用户来说就是信息、是价值。

上次参加一个架构师培训的时候,老师给我们举了一个例子。三峡工程需要做一个项目,这个肥差当然有很多软件公司抢着要。但其中有一家软件公司曾经给三峡工程做数据库,他们掌握着所有的数据信息。这样一来,其他公司的机会就微乎其微了。整个数据都掌握在别人手里,再去和他竞争是没有任何意思的。最终的结果也是这家掌握了数据主动权的公司拿到了项目。

现在国内有不少软件公司发展得不错,尤其是在做行业软件的时候。一些有实力的人都争先恐后地提出标准,就是些数据标准。如果这样的标准在行业内得到认可的话,这家公司可以说是立于不败之地了。由此可见数据的重要。

数据层为地,它具有大地“厚德载物”的特性。它是整个软件的立命所在,这层的好坏直接影响到整个软件体系。

3.2 用户是上帝

表现层是用户直接接触的软件模块。用户是上帝,今后面向服务的产业模式更好地突出了这句话的含义。

有很多人专门研究人机交互,他们的工作就是研究表现层的设计了。

敏捷是非常好的思想。其中敏捷的核心是迭代,迭代的核心是用户。敏捷之所以能更加成功,关键点就在于它把握住了软件中的核心——用户。表现层直接和用户打交道,所以它的主要职责就是满足用户的需求,将功能以最合适的方式展现给用户。

表现层为天。《易经》中说“天尊地卑”。这有两种含义,一是,天高高在上,我们需要用尊重的态度去对待,一切都是用户至上;另外天为什么尊贵,那是因为它离我们最远,说地卑并不是说他不重要,而是说地离我们最近也最亲近。用户离我们是非常远的,当我们注意到这点后在行动上就要有所不同了,比如说XP中提倡的“客户参与”就表明XP大师们知道这点。

3.3 万物之灵最难为

在学校或者刚进入公司的时候,写程序更加关注界面的实现,一看到漂亮的界面就会去研究它是怎么实现的,然后迫不及待地想加到自己的程序中。

等到真正成为一个职业的程序员后才会明白,软件中的核心不在界面,其实也不在数据层,而是在领域层。领域层中包含的是绝大多数用户需求的实现。单凭这点,领域层在软件中的位置就不言而喻了。

领域层是人,人是天地之间的万物之灵,是阴阳调和的产物。为什么说领域层是人呢?做人有一点非常关键——变通。人是一切社会关系的总和,如果一个人不懂得变通,那么他是很难在社会上生存下去的。

领域层同样也需要有变通的性质。用户需求变化,我们的软件就必须要改,这个叫做变。变完之后我们还需要有大量的时间来维护,怎样降低维护成本呢,需要我们有一个良好的设计,这个叫做通。我们不管是在最初设计领域层,还是以后不断维护它的时候都需要注意“变通”。

不变不通,那这个软件基本上就废掉了。很多时候我们的软件需要做新版本,当然一方面是想收用户的升级费,另外更要紧的是因为以前的版本“不变不通”了。用户的新需求加不上去,维护成本惊人。算了,新做一个吧。如果我们在维护的时候也能注意变通的话,软件的生命周期应该会长得多。

领域层是“人”,人是万物之灵,真是“万物之灵最难为”。

四、软件中的阴阳

阴阳变化乃生万物。任何事物中都有阴阳,那就看我们怎么分析了。

拿阴阳之说来阐述软件,我好像是有史以来第一人,没有见过其他的资料,如果有朋友发现在这篇文章之前还有高人这样做过,恳请告知,我一定要去拜读。

对于软件来说,有两端需要我们注意。一个是用户、一个是数据(二进制的、文本的、图片的、数据库的)。所有的软件都在做同样一件事情,没有第二件。软件都在处理用户和数据的关系。

用户为乾(阳)、数据为坤(阴)。我们的软件就是在阴阳之间调和。将用户和冷冰冰的数据联系起来就是我们做软件的宗旨。

五、不一定需要三层

前面介绍了三层架构。但不是所有的软件都需要三层。拿到一个系统,二话不说就来三层,这样做是非常错误的。

有的软件特别简单,一层就搞定了,还分什么,徒增麻烦。有的软件用BS结构搞定的非常漂亮,没有其他的需求的话非搞出一个第三层也是亏本的买卖。

对于复杂的软件来说,三层就是一个比较好的解决方法了。另外还有其他的一些分层方式。

Brown提出的五层,表现层、控制层、领域层、数据映射层、数据源层。
Core J2EE的五层,客户层、表现层、业务层、集成层、资源层。
Microsoft的DNA架构,表现层,业务层,数据访问层。

还有很多,就不一一举例了。

大家看看上面这些分层架构,其实不管多么复杂,都是阴阳(用户到数据)的相互调和,所以“二生三,三生万物”。当我们把根本的东西掌握住之后,不管万物怎样变化,都是可以被我们认知、掌握的。

PS:这篇文章写出来后非常担心网友们觉得写得太肤浅。万事开头难,有了这个想法我一定会坚持不懈地研究下去的。现在只好请诸位忍耐忍耐,多看看在下的几篇拙文。衷心感谢那些批评的、给我建议的朋友们。以后也请大家多多批评指正。 




三层架构是我们设计复杂的企业应用的一个最基本的分层结构了。下面试图阐述一下三层架构的基本特性。并且结合易经的知识来帮助我们理清思路,更好地看到三层架构的本质。

这里要向大家推荐Martin Fowler写的《企业应用架构模式》,里面对三层架构有很清楚的解释了。

一、三层架构

在分解复杂的软件系统时,我们常用的技术之一就是分层。计算机世界中大量使用分层,比如说从应用软件、操作系统到硬件层;另外还有大家都熟悉的TCP/IP架构。分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。

我们这里着重要分析的是三层架构。三层架构分为:表现层、领域层、数据源层。

表现层提供服务,显示信息,处理用户请求,HTTP请求,命令行调用,批处理API。
领域层包含业务逻辑,系统中真正的核心。
数据源层处理与数据库、消息系统、事务管理器及其他软件包通信。

提一下,这里的分层指的是逻辑上的分层,和系统部署在几台机器上并没有关系。另外还存在着物理上的分离,这个就不再讨论范围之内了,强调一下避免有人混淆。

二、三才之道

接下来说重点。《道德经》中的一句话“道生一,一生二,二生三,三生万物”,这个观点是从《易经》中来的,所以借用这句话来引出“三才”的概念。首先从无生有,出来那个一,叫做太极。太极生两仪,一分为二有了阴阳。阴阳调和出来三,于是有了不阴不阳的东西“和”。

大家肯定听过盘古开天地的传说,盘古一把斧头劈过去,清的上升变成了天,浊的下降变成了地,处于清浊之间的就成了天地万物。也就是说“三才”指的就是天、地、人。分别代表的是清、浊、和。

三、软件中的三才

可以将软件中的三层架构用三才的角度来分析。表现层为天,数据层为地,领域层为人,这样三层架构中的每一层就有了独特的属性与含义。

3.1 数据是根本

我们的软件从本质上来说都是在处理数据,数据对于用户来说就是信息、是价值。

上次参加一个架构师培训的时候,老师给我们举了一个例子。三峡工程需要做一个项目,这个肥差当然有很多软件公司抢着要。但其中有一家软件公司曾经给三峡工程做数据库,他们掌握着所有的数据信息。这样一来,其他公司的机会就微乎其微了。整个数据都掌握在别人手里,再去和他竞争是没有任何意思的。最终的结果也是这家掌握了数据主动权的公司拿到了项目。

现在国内有不少软件公司发展得不错,尤其是在做行业软件的时候。一些有实力的人都争先恐后地提出标准,就是些数据标准。如果这样的标准在行业内得到认可的话,这家公司可以说是立于不败之地了。由此可见数据的重要。

数据层为地,它具有大地“厚德载物”的特性。它是整个软件的立命所在,这层的好坏直接影响到整个软件体系。

3.2 用户是上帝

表现层是用户直接接触的软件模块。用户是上帝,今后面向服务的产业模式更好地突出了这句话的含义。

有很多人专门研究人机交互,他们的工作就是研究表现层的设计了。

敏捷是非常好的思想。其中敏捷的核心是迭代,迭代的核心是用户。敏捷之所以能更加成功,关键点就在于它把握住了软件中的核心——用户。表现层直接和用户打交道,所以它的主要职责就是满足用户的需求,将功能以最合适的方式展现给用户。

表现层为天。《易经》中说“天尊地卑”。这有两种含义,一是,天高高在上,我们需要用尊重的态度去对待,一切都是用户至上;另外天为什么尊贵,那是因为它离我们最远,说地卑并不是说他不重要,而是说地离我们最近也最亲近。用户离我们是非常远的,当我们注意到这点后在行动上就要有所不同了,比如说XP中提倡的“客户参与”就表明XP大师们知道这点。

3.3 万物之灵最难为

在学校或者刚进入公司的时候,写程序更加关注界面的实现,一看到漂亮的界面就会去研究它是怎么实现的,然后迫不及待地想加到自己的程序中。

等到真正成为一个职业的程序员后才会明白,软件中的核心不在界面,其实也不在数据层,而是在领域层。领域层中包含的是绝大多数用户需求的实现。单凭这点,领域层在软件中的位置就不言而喻了。

领域层是人,人是天地之间的万物之灵,是阴阳调和的产物。为什么说领域层是人呢?做人有一点非常关键——变通。人是一切社会关系的总和,如果一个人不懂得变通,那么他是很难在社会上生存下去的。

领域层同样也需要有变通的性质。用户需求变化,我们的软件就必须要改,这个叫做变。变完之后我们还需要有大量的时间来维护,怎样降低维护成本呢,需要我们有一个良好的设计,这个叫做通。我们不管是在最初设计领域层,还是以后不断维护它的时候都需要注意“变通”。

不变不通,那这个软件基本上就废掉了。很多时候我们的软件需要做新版本,当然一方面是想收用户的升级费,另外更要紧的是因为以前的版本“不变不通”了。用户的新需求加不上去,维护成本惊人。算了,新做一个吧。如果我们在维护的时候也能注意变通的话,软件的生命周期应该会长得多。

领域层是“人”,人是万物之灵,真是“万物之灵最难为”。

四、软件中的阴阳

阴阳变化乃生万物。任何事物中都有阴阳,那就看我们怎么分析了。

拿阴阳之说来阐述软件,我好像是有史以来第一人,没有见过其他的资料,如果有朋友发现在这篇文章之前还有高人这样做过,恳请告知,我一定要去拜读。

对于软件来说,有两端需要我们注意。一个是用户、一个是数据(二进制的、文本的、图片的、数据库的)。所有的软件都在做同样一件事情,没有第二件。软件都在处理用户和数据的关系。

用户为乾(阳)、数据为坤(阴)。我们的软件就是在阴阳之间调和。将用户和冷冰冰的数据联系起来就是我们做软件的宗旨。

五、不一定需要三层

前面介绍了三层架构。但不是所有的软件都需要三层。拿到一个系统,二话不说就来三层,这样做是非常错误的。

有的软件特别简单,一层就搞定了,还分什么,徒增麻烦。有的软件用BS结构搞定的非常漂亮,没有其他的需求的话非搞出一个第三层也是亏本的买卖。

对于复杂的软件来说,三层就是一个比较好的解决方法了。另外还有其他的一些分层方式。

Brown提出的五层,表现层、控制层、领域层、数据映射层、数据源层。
Core J2EE的五层,客户层、表现层、业务层、集成层、资源层。
Microsoft的DNA架构,表现层,业务层,数据访问层。

还有很多,就不一一举例了。

大家看看上面这些分层架构,其实不管多么复杂,都是阴阳(用户到数据)的相互调和,所以“二生三,三生万物”。当我们把根本的东西掌握住之后,不管万物怎样变化,都是可以被我们认知、掌握的。

PS:这篇文章写出来后非常担心网友们觉得写得太肤浅。万事开头难,有了这个想法我一定会坚持不懈地研究下去的。现在只好请诸位忍耐忍耐,多看看在下的几篇拙文。衷心感谢那些批评的、给我建议的朋友们。以后也请大家多多批评指正。 




三层架构是我们设计复杂的企业应用的一个最基本的分层结构了。下面试图阐述一下三层架构的基本特性。并且结合易经的知识来帮助我们理清思路,更好地看到三层架构的本质。

这里要向大家推荐Martin Fowler写的《企业应用架构模式》,里面对三层架构有很清楚的解释了。

一、三层架构

在分解复杂的软件系统时,我们常用的技术之一就是分层。计算机世界中大量使用分层,比如说从应用软件、操作系统到硬件层;另外还有大家都熟悉的TCP/IP架构。分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。

我们这里着重要分析的是三层架构。三层架构分为:表现层、领域层、数据源层。

表现层提供服务,显示信息,处理用户请求,HTTP请求,命令行调用,批处理API。
领域层包含业务逻辑,系统中真正的核心。
数据源层处理与数据库、消息系统、事务管理器及其他软件包通信。

提一下,这里的分层指的是逻辑上的分层,和系统部署在几台机器上并没有关系。另外还存在着物理上的分离,这个就不再讨论范围之内了,强调一下避免有人混淆。

二、三才之道

接下来说重点。《道德经》中的一句话“道生一,一生二,二生三,三生万物”,这个观点是从《易经》中来的,所以借用这句话来引出“三才”的概念。首先从无生有,出来那个一,叫做太极。太极生两仪,一分为二有了阴阳。阴阳调和出来三,于是有了不阴不阳的东西“和”。

大家肯定听过盘古开天地的传说,盘古一把斧头劈过去,清的上升变成了天,浊的下降变成了地,处于清浊之间的就成了天地万物。也就是说“三才”指的就是天、地、人。分别代表的是清、浊、和。

三、软件中的三才

可以将软件中的三层架构用三才的角度来分析。表现层为天,数据层为地,领域层为人,这样三层架构中的每一层就有了独特的属性与含义。

3.1 数据是根本

我们的软件从本质上来说都是在处理数据,数据对于用户来说就是信息、是价值。

上次参加一个架构师培训的时候,老师给我们举了一个例子。三峡工程需要做一个项目,这个肥差当然有很多软件公司抢着要。但其中有一家软件公司曾经给三峡工程做数据库,他们掌握着所有的数据信息。这样一来,其他公司的机会就微乎其微了。整个数据都掌握在别人手里,再去和他竞争是没有任何意思的。最终的结果也是这家掌握了数据主动权的公司拿到了项目。

现在国内有不少软件公司发展得不错,尤其是在做行业软件的时候。一些有实力的人都争先恐后地提出标准,就是些数据标准。如果这样的标准在行业内得到认可的话,这家公司可以说是立于不败之地了。由此可见数据的重要。

数据层为地,它具有大地“厚德载物”的特性。它是整个软件的立命所在,这层的好坏直接影响到整个软件体系。

3.2 用户是上帝

表现层是用户直接接触的软件模块。用户是上帝,今后面向服务的产业模式更好地突出了这句话的含义。

有很多人专门研究人机交互,他们的工作就是研究表现层的设计了。

敏捷是非常好的思想。其中敏捷的核心是迭代,迭代的核心是用户。敏捷之所以能更加成功,关键点就在于它把握住了软件中的核心——用户。表现层直接和用户打交道,所以它的主要职责就是满足用户的需求,将功能以最合适的方式展现给用户。

表现层为天。《易经》中说“天尊地卑”。这有两种含义,一是,天高高在上,我们需要用尊重的态度去对待,一切都是用户至上;另外天为什么尊贵,那是因为它离我们最远,说地卑并不是说他不重要,而是说地离我们最近也最亲近。用户离我们是非常远的,当我们注意到这点后在行动上就要有所不同了,比如说XP中提倡的“客户参与”就表明XP大师们知道这点。

3.3 万物之灵最难为

在学校或者刚进入公司的时候,写程序更加关注界面的实现,一看到漂亮的界面就会去研究它是怎么实现的,然后迫不及待地想加到自己的程序中。

等到真正成为一个职业的程序员后才会明白,软件中的核心不在界面,其实也不在数据层,而是在领域层。领域层中包含的是绝大多数用户需求的实现。单凭这点,领域层在软件中的位置就不言而喻了。

领域层是人,人是天地之间的万物之灵,是阴阳调和的产物。为什么说领域层是人呢?做人有一点非常关键——变通。人是一切社会关系的总和,如果一个人不懂得变通,那么他是很难在社会上生存下去的。

领域层同样也需要有变通的性质。用户需求变化,我们的软件就必须要改,这个叫做变。变完之后我们还需要有大量的时间来维护,怎样降低维护成本呢,需要我们有一个良好的设计,这个叫做通。我们不管是在最初设计领域层,还是以后不断维护它的时候都需要注意“变通”。

不变不通,那这个软件基本上就废掉了。很多时候我们的软件需要做新版本,当然一方面是想收用户的升级费,另外更要紧的是因为以前的版本“不变不通”了。用户的新需求加不上去,维护成本惊人。算了,新做一个吧。如果我们在维护的时候也能注意变通的话,软件的生命周期应该会长得多。

领域层是“人”,人是万物之灵,真是“万物之灵最难为”。

四、软件中的阴阳

阴阳变化乃生万物。任何事物中都有阴阳,那就看我们怎么分析了。

拿阴阳之说来阐述软件,我好像是有史以来第一人,没有见过其他的资料,如果有朋友发现在这篇文章之前还有高人这样做过,恳请告知,我一定要去拜读。

对于软件来说,有两端需要我们注意。一个是用户、一个是数据(二进制的、文本的、图片的、数据库的)。所有的软件都在做同样一件事情,没有第二件。软件都在处理用户和数据的关系。

用户为乾(阳)、数据为坤(阴)。我们的软件就是在阴阳之间调和。将用户和冷冰冰的数据联系起来就是我们做软件的宗旨。

五、不一定需要三层

前面介绍了三层架构。但不是所有的软件都需要三层。拿到一个系统,二话不说就来三层,这样做是非常错误的。

有的软件特别简单,一层就搞定了,还分什么,徒增麻烦。有的软件用BS结构搞定的非常漂亮,没有其他的需求的话非搞出一个第三层也是亏本的买卖。

对于复杂的软件来说,三层就是一个比较好的解决方法了。另外还有其他的一些分层方式。

Brown提出的五层,表现层、控制层、领域层、数据映射层、数据源层。
Core J2EE的五层,客户层、表现层、业务层、集成层、资源层。
Microsoft的DNA架构,表现层,业务层,数据访问层。

还有很多,就不一一举例了。

大家看看上面这些分层架构,其实不管多么复杂,都是阴阳(用户到数据)的相互调和,所以“二生三,三生万物”。当我们把根本的东西掌握住之后,不管万物怎样变化,都是可以被我们认知、掌握的。

PS:这篇文章写出来后非常担心网友们觉得写得太肤浅。万事开头难,有了这个想法我一定会坚持不懈地研究下去的。现在只好请诸位忍耐忍耐,多看看在下的几篇拙文。衷心感谢那些批评的、给我建议的朋友们。以后也请大家多多批评指正。 




三层架构是我们设计复杂的企业应用的一个最基本的分层结构了。下面试图阐述一下三层架构的基本特性。并且结合易经的知识来帮助我们理清思路,更好地看到三层架构的本质。

这里要向大家推荐Martin Fowler写的《企业应用架构模式》,里面对三层架构有很清楚的解释了。

一、三层架构

在分解复杂的软件系统时,我们常用的技术之一就是分层。计算机世界中大量使用分层,比如说从应用软件、操作系统到硬件层;另外还有大家都熟悉的TCP/IP架构。分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。

我们这里着重要分析的是三层架构。三层架构分为:表现层、领域层、数据源层。

表现层提供服务,显示信息,处理用户请求,HTTP请求,命令行调用,批处理API。
领域层包含业务逻辑,系统中真正的核心。
数据源层处理与数据库、消息系统、事务管理器及其他软件包通信。

提一下,这里的分层指的是逻辑上的分层,和系统部署在几台机器上并没有关系。另外还存在着物理上的分离,这个就不再讨论范围之内了,强调一下避免有人混淆。

二、三才之道

接下来说重点。《道德经》中的一句话“道生一,一生二,二生三,三生万物”,这个观点是从《易经》中来的,所以借用这句话来引出“三才”的概念。首先从无生有,出来那个一,叫做太极。太极生两仪,一分为二有了阴阳。阴阳调和出来三,于是有了不阴不阳的东西“和”。

大家肯定听过盘古开天地的传说,盘古一把斧头劈过去,清的上升变成了天,浊的下降变成了地,处于清浊之间的就成了天地万物。也就是说“三才”指的就是天、地、人。分别代表的是清、浊、和。

三、软件中的三才

可以将软件中的三层架构用三才的角度来分析。表现层为天,数据层为地,领域层为人,这样三层架构中的每一层就有了独特的属性与含义。

3.1 数据是根本

我们的软件从本质上来说都是在处理数据,数据对于用户来说就是信息、是价值。

上次参加一个架构师培训的时候,老师给我们举了一个例子。三峡工程需要做一个项目,这个肥差当然有很多软件公司抢着要。但其中有一家软件公司曾经给三峡工程做数据库,他们掌握着所有的数据信息。这样一来,其他公司的机会就微乎其微了。整个数据都掌握在别人手里,再去和他竞争是没有任何意思的。最终的结果也是这家掌握了数据主动权的公司拿到了项目。

现在国内有不少软件公司发展得不错,尤其是在做行业软件的时候。一些有实力的人都争先恐后地提出标准,就是些数据标准。如果这样的标准在行业内得到认可的话,这家公司可以说是立于不败之地了。由此可见数据的重要。

数据层为地,它具有大地“厚德载物”的特性。它是整个软件的立命所在,这层的好坏直接影响到整个软件体系。

3.2 用户是上帝

表现层是用户直接接触的软件模块。用户是上帝,今后面向服务的产业模式更好地突出了这句话的含义。

有很多人专门研究人机交互,他们的工作就是研究表现层的设计了。

敏捷是非常好的思想。其中敏捷的核心是迭代,迭代的核心是用户。敏捷之所以能更加成功,关键点就在于它把握住了软件中的核心——用户。表现层直接和用户打交道,所以它的主要职责就是满足用户的需求,将功能以最合适的方式展现给用户。

表现层为天。《易经》中说“天尊地卑”。这有两种含义,一是,天高高在上,我们需要用尊重的态度去对待,一切都是用户至上;另外天为什么尊贵,那是因为它离我们最远,说地卑并不是说他不重要,而是说地离我们最近也最亲近。用户离我们是非常远的,当我们注意到这点后在行动上就要有所不同了,比如说XP中提倡的“客户参与”就表明XP大师们知道这点。

3.3 万物之灵最难为

在学校或者刚进入公司的时候,写程序更加关注界面的实现,一看到漂亮的界面就会去研究它是怎么实现的,然后迫不及待地想加到自己的程序中。

等到真正成为一个职业的程序员后才会明白,软件中的核心不在界面,其实也不在数据层,而是在领域层。领域层中包含的是绝大多数用户需求的实现。单凭这点,领域层在软件中的位置就不言而喻了。

领域层是人,人是天地之间的万物之灵,是阴阳调和的产物。为什么说领域层是人呢?做人有一点非常关键——变通。人是一切社会关系的总和,如果一个人不懂得变通,那么他是很难在社会上生存下去的。

领域层同样也需要有变通的性质。用户需求变化,我们的软件就必须要改,这个叫做变。变完之后我们还需要有大量的时间来维护,怎样降低维护成本呢,需要我们有一个良好的设计,这个叫做通。我们不管是在最初设计领域层,还是以后不断维护它的时候都需要注意“变通”。

不变不通,那这个软件基本上就废掉了。很多时候我们的软件需要做新版本,当然一方面是想收用户的升级费,另外更要紧的是因为以前的版本“不变不通”了。用户的新需求加不上去,维护成本惊人。算了,新做一个吧。如果我们在维护的时候也能注意变通的话,软件的生命周期应该会长得多。

领域层是“人”,人是万物之灵,真是“万物之灵最难为”。

四、软件中的阴阳

阴阳变化乃生万物。任何事物中都有阴阳,那就看我们怎么分析了。

拿阴阳之说来阐述软件,我好像是有史以来第一人,没有见过其他的资料,如果有朋友发现在这篇文章之前还有高人这样做过,恳请告知,我一定要去拜读。

对于软件来说,有两端需要我们注意。一个是用户、一个是数据(二进制的、文本的、图片的、数据库的)。所有的软件都在做同样一件事情,没有第二件。软件都在处理用户和数据的关系。

用户为乾(阳)、数据为坤(阴)。我们的软件就是在阴阳之间调和。将用户和冷冰冰的数据联系起来就是我们做软件的宗旨。

五、不一定需要三层

前面介绍了三层架构。但不是所有的软件都需要三层。拿到一个系统,二话不说就来三层,这样做是非常错误的。

有的软件特别简单,一层就搞定了,还分什么,徒增麻烦。有的软件用BS结构搞定的非常漂亮,没有其他的需求的话非搞出一个第三层也是亏本的买卖。

对于复杂的软件来说,三层就是一个比较好的解决方法了。另外还有其他的一些分层方式。

Brown提出的五层,表现层、控制层、领域层、数据映射层、数据源层。
Core J2EE的五层,客户层、表现层、业务层、集成层、资源层。
Microsoft的DNA架构,表现层,业务层,数据访问层。

还有很多,就不一一举例了。

大家看看上面这些分层架构,其实不管多么复杂,都是阴阳(用户到数据)的相互调和,所以“二生三,三生万物”。当我们把根本的东西掌握住之后,不管万物怎样变化,都是可以被我们认知、掌握的。

PS:这篇文章写出来后非常担心网友们觉得写得太肤浅。万事开头难,有了这个想法我一定会坚持不懈地研究下去的。现在只好请诸位忍耐忍耐,多看看在下的几篇拙文。衷心感谢那些批评的、给我建议的朋友们。以后也请大家多多批评指正。 




三层架构是我们设计复杂的企业应用的一个最基本的分层结构了。下面试图阐述一下三层架构的基本特性。并且结合易经的知识来帮助我们理清思路,更好地看到三层架构的本质。

这里要向大家推荐Martin Fowler写的《企业应用架构模式》,里面对三层架构有很清楚的解释了。

一、三层架构

在分解复杂的软件系统时,我们常用的技术之一就是分层。计算机世界中大量使用分层,比如说从应用软件、操作系统到硬件层;另外还有大家都熟悉的TCP/IP架构。分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。

我们这里着重要分析的是三层架构。三层架构分为:表现层、领域层、数据源层。

表现层提供服务,显示信息,处理用户请求,HTTP请求,命令行调用,批处理API。
领域层包含业务逻辑,系统中真正的核心。
数据源层处理与数据库、消息系统、事务管理器及其他软件包通信。

提一下,这里的分层指的是逻辑上的分层,和系统部署在几台机器上并没有关系。另外还存在着物理上的分离,这个就不再讨论范围之内了,强调一下避免有人混淆。

二、三才之道

接下来说重点。《道德经》中的一句话“道生一,一生二,二生三,三生万物”,这个观点是从《易经》中来的,所以借用这句话来引出“三才”的概念。首先从无生有,出来那个一,叫做太极。太极生两仪,一分为二有了阴阳。阴阳调和出来三,于是有了不阴不阳的东西“和”。

大家肯定听过盘古开天地的传说,盘古一把斧头劈过去,清的上升变成了天,浊的下降变成了地,处于清浊之间的就成了天地万物。也就是说“三才”指的就是天、地、人。分别代表的是清、浊、和。

三、软件中的三才

可以将软件中的三层架构用三才的角度来分析。表现层为天,数据层为地,领域层为人,这样三层架构中的每一层就有了独特的属性与含义。

3.1 数据是根本

我们的软件从本质上来说都是在处理数据,数据对于用户来说就是信息、是价值。

上次参加一个架构师培训的时候,老师给我们举了一个例子。三峡工程需要做一个项目,这个肥差当然有很多软件公司抢着要。但其中有一家软件公司曾经给三峡工程做数据库,他们掌握着所有的数据信息。这样一来,其他公司的机会就微乎其微了。整个数据都掌握在别人手里,再去和他竞争是没有任何意思的。最终的结果也是这家掌握了数据主动权的公司拿到了项目。

现在国内有不少软件公司发展得不错,尤其是在做行业软件的时候。一些有实力的人都争先恐后地提出标准,就是些数据标准。如果这样的标准在行业内得到认可的话,这家公司可以说是立于不败之地了。由此可见数据的重要。

数据层为地,它具有大地“厚德载物”的特性。它是整个软件的立命所在,这层的好坏直接影响到整个软件体系。

3.2 用户是上帝

表现层是用户直接接触的软件模块。用户是上帝,今后面向服务的产业模式更好地突出了这句话的含义。

有很多人专门研究人机交互,他们的工作就是研究表现层的设计了。

敏捷是非常好的思想。其中敏捷的核心是迭代,迭代的核心是用户。敏捷之所以能更加成功,关键点就在于它把握住了软件中的核心——用户。表现层直接和用户打交道,所以它的主要职责就是满足用户的需求,将功能以最合适的方式展现给用户。

表现层为天。《易经》中说“天尊地卑”。这有两种含义,一是,天高高在上,我们需要用尊重的态度去对待,一切都是用户至上;另外天为什么尊贵,那是因为它离我们最远,说地卑并不是说他不重要,而是说地离我们最近也最亲近。用户离我们是非常远的,当我们注意到这点后在行动上就要有所不同了,比如说XP中提倡的“客户参与”就表明XP大师们知道这点。

3.3 万物之灵最难为

在学校或者刚进入公司的时候,写程序更加关注界面的实现,一看到漂亮的界面就会去研究它是怎么实现的,然后迫不及待地想加到自己的程序中。

等到真正成为一个职业的程序员后才会明白,软件中的核心不在界面,其实也不在数据层,而是在领域层。领域层中包含的是绝大多数用户需求的实现。单凭这点,领域层在软件中的位置就不言而喻了。

领域层是人,人是天地之间的万物之灵,是阴阳调和的产物。为什么说领域层是人呢?做人有一点非常关键——变通。人是一切社会关系的总和,如果一个人不懂得变通,那么他是很难在社会上生存下去的。

领域层同样也需要有变通的性质。用户需求变化,我们的软件就必须要改,这个叫做变。变完之后我们还需要有大量的时间来维护,怎样降低维护成本呢,需要我们有一个良好的设计,这个叫做通。我们不管是在最初设计领域层,还是以后不断维护它的时候都需要注意“变通”。

不变不通,那这个软件基本上就废掉了。很多时候我们的软件需要做新版本,当然一方面是想收用户的升级费,另外更要紧的是因为以前的版本“不变不通”了。用户的新需求加不上去,维护成本惊人。算了,新做一个吧。如果我们在维护的时候也能注意变通的话,软件的生命周期应该会长得多。

领域层是“人”,人是万物之灵,真是“万物之灵最难为”。

四、软件中的阴阳

阴阳变化乃生万物。任何事物中都有阴阳,那就看我们怎么分析了。

拿阴阳之说来阐述软件,我好像是有史以来第一人,没有见过其他的资料,如果有朋友发现在这篇文章之前还有高人这样做过,恳请告知,我一定要去拜读。

对于软件来说,有两端需要我们注意。一个是用户、一个是数据(二进制的、文本的、图片的、数据库的)。所有的软件都在做同样一件事情,没有第二件。软件都在处理用户和数据的关系。

用户为乾(阳)、数据为坤(阴)。我们的软件就是在阴阳之间调和。将用户和冷冰冰的数据联系起来就是我们做软件的宗旨。

五、不一定需要三层

前面介绍了三层架构。但不是所有的软件都需要三层。拿到一个系统,二话不说就来三层,这样做是非常错误的。

有的软件特别简单,一层就搞定了,还分什么,徒增麻烦。有的软件用BS结构搞定的非常漂亮,没有其他的需求的话非搞出一个第三层也是亏本的买卖。

对于复杂的软件来说,三层就是一个比较好的解决方法了。另外还有其他的一些分层方式。

Brown提出的五层,表现层、控制层、领域层、数据映射层、数据源层。
Core J2EE的五层,客户层、表现层、业务层、集成层、资源层。
Microsoft的DNA架构,表现层,业务层,数据访问层。

还有很多,就不一一举例了。

大家看看上面这些分层架构,其实不管多么复杂,都是阴阳(用户到数据)的相互调和,所以“二生三,三生万物”。当我们把根本的东西掌握住之后,不管万物怎样变化,都是可以被我们认知、掌握的。

PS:这篇文章写出来后非常担心网友们觉得写得太肤浅。万事开头难,有了这个想法我一定会坚持不懈地研究下去的。现在只好请诸位忍耐忍耐,多看看在下的几篇拙文。衷心感谢那些批评的、给我建议的朋友们。以后也请大家多多批评指正。