03模型与驱动

作者: 玩哲 | 来源:发表于2017-12-13 09:41 被阅读4083次

13

其中的关键核心点是,不同涉众的关注点的分割。我有我自己的关注点,你有你的关注点,不同的关注点汇聚到一起,而关注点背后代表的是一种人的观点,这些人就构成了不同的涉众,然后在不同的涉众里面,他们之间会有一些各种各样的关系,这些关系之间是如何交互的,这就构成了一个模型。

其实,模型是用来表示,各个涉众,各个关注点,以及他们代表的事物之间的关系的。

对一个观察者来说,他观察了一个主题,或者一个物体,一个subject,而这个观察者他观察这个主题的时候,肯定是想了解清楚这个主题,搞清楚他要观察的对象是什么,他要解决的问题是什么。作为观察者,他之所以去观察,一定会有一个问题来引导他去观察,或者说,对观察者来说,他想回答这个问题,所以他才关注这个问题,他的目的就是想得到的答案。

我们可以使用一个模型,来描述这个观察者的一系列过程,而标识它的这个过程肯定不仅仅只有一个模型,但我们使用的模型,是抽象了主题里面的所有东西的一个模型,这也就是该模型是一个主题的模型,这个时候,才尽可能的表达出真实的意图,从而能够把误差控制在可以接受的范围之内。

14

然后,这个Model,这个M就是这个模型的观察者。

我一再强调,所有的模型不可能完全代表事实本身,它一定是和事实有偏差的,甚至是有些误差的,在这个模型内,描摹真实世界是不可能的,这个数值内任何数据都有误差,模型的好坏,不在于消除误差,而在于是否可以满足在可接受的误差范围之内。

其实对于大部分工程过程来说,尤其是对于整个软件的开发来说,大多数下,都可以归属于是模型驱动的软件开发过程

通过模型驱动的软件开发过程,然后我们最终获得设定的战略设想,然后把这种设想,做成了一个模型。所以说,架构它的思想的表达方式,就是去设计模型,设计出能够表达我们战略设想的模型。

然后让我们通过模型,表达出了人、事、物、规则之间的关系,我们的架构最终导向到模型驱动的架构,然后我们能通过使用模型驱动的架构,来驱动我们的软件开发过程。

15

当然,就概念上来讲,软件架构,并不仅仅只有模型驱动的架构。

模型驱动的架构,也只是一种架构的风格,风格有多种多样,选择不同的架构风格也是要看不同的企业环境,我们之所以选择模型驱动的架构来描述,这也只是为了更好的表达架构思想而已。

架构的风格是为系统的架构信息提供战略设想的。

这个设想的第一步就是,先想清楚一下我们的风格是什么,再去选择哪些架构的风格,甚至是需要你去创造架构的风格,而我们最终选择了模型驱动的架构风格。我又融入了很多的概念,你可以把它当成一种世界观一种方法论,我们另外选择的是,面向对象的一种架构的风格。比如,CS(客户服务器结构),这都是我们架构的一种风格,你一旦了解清楚了需求(requirements),要做的一件事情就是,来选择一种风格,来有效的设计你的需求。

怎么选的架构模式,当然不是凭空设想,而是脚踏实在,也不是随机胡乱的组合,而是政治、经济和斗争的结果中间寻求的一种平衡,然后根据这个平衡,再选择这样一种架构的风格。

16

高度决定我们的视野,你只能站在这样的高度上,在充分理解了你的环境以及上下文之间的关系上,然后再去发现,分析,与解决问题。

用我们的话说,我们不同的人,因为层次不同,所看到的世界也是不一样的,这是因为他的关注点不同造成的。

而架构,在一个软件项目中,是在最高级别在思考与设计,考虑这一系列问题的。它一定要关注一些很多很多互相关联的事情,一定要对不同涉众者的关注点的分割,也就是说,一个总裁的关注点肯定和一个员工的关注点是不一样的,这里并不是歧视不同的员工,当然总裁也是员工,而是说,人在企业中的身份与分工,必定会导致他们看待问题的角度是不一样的。

换句话说,我们要通过不同涉众的角度的不同,来区分与分隔这些关注点。

架构师,在一个项目组里,他是一个team的成员,当然有些项目比较简单的话,也不需要架构师。当你们项目中有架构师的时候,祝贺你,这说明你们的系统比较先进了。因此,架构师是一个系统的设置。

17

关于系统的质量问题,我们分成两部分,一个是开发时的质量,一个是运行时的质量,设计模式这个可以解决一个重要的quality,那就是软件开发的质量。质量本身就包括可扩展性,这可以通过设计模式的方式来很好的表达。

我们简单的介绍几个设计模式的原理。

(1)、开闭原则(Open Close Principle)

OCP就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

(2)、里氏代换原则(Liskov Substitution Principle)

这是面向对象设计的基本原则之一。任何基类可以出现的地方,子类一定可以出现。

LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。LSP是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以LSP是对实现抽象化的具体步骤的规范。

(3)、依赖倒转原则(Dependence Inversion Principle)

DIP是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

(4)、接口隔离原则(Interface Segregation Principle)

ISP使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿可以看出,设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。目标是:降低依赖,降低耦合。

(5)、迪米特法则(最少知道原则)(Demeter Principle)

DP是,一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

(6)、合成复用原则(Composite Reuse Principle)

CRP是尽量使用合成/聚合的方式,而不是使用继承。

这些原理,都是概念的载体,就是怎么样才能达到我们的可扩展性,例如可以通过某个具体的设计模式来提供一种做法,但前提是,要了解这些设计模式适用的情景,也就是你要搞清楚你想要干什么。

18

我们的架构框架,要解决一个首要的问题,就是谁来使用你的软件。

你要找出来系统的涉众。每一个涉众都有很多,所以要进行分割。分割出来的结果就一个关注点。

一个涉众,通过不同关注点构成一个集合,不同的集合根据汇总与综合,根据业务的特点,我们把它做成一个模块,然后这些不同模块互相配合,构成了这样的一个软件系统。

我们的系统,有不同的涉众,有不同的关注点,不同的集合,不同的模块,就相当于每个人都有自己的事业,而涉众就是一个人对应的关注点。因为每个人的关注点是不一样的,而不同的涉众都有他的利益点,或者说都有他自己的看法,因此不同的涉众,他拥有的关注点就会不同。

我们架构师,就是通过抽象来分析这些关注点,然后给它取了一个名字就叫涉众。不同的人就需要有不同的设计,然后又对应不同的事件,这些不同事件又组成了一个完整的整体。

所以我们必须要定义不同事件之间的对应关系,也就是要确定不同的规则、议事,各种人事物,责权利的规则,这都要理解解决清楚,这我们前进的目标,不然,你也没法进行工作了。

很多软件相关专业的学生,在他们的大学课程里,项目管理、需求分析等等都学了,但去公司里工作时发现没用,这是因为全是书本上的,没有实践经验,完全是理论,这基本等于没学。因为,在真实的企业里,不但有技术因素,还有经济因素,当然还有政治斗争因素,我会告诉你这就是现实,我们不需要解释为什么这样。

企业里面,对刚毕业的学生来说,就是个初级新手,你就得接受这样的环境,要不你就离开,庙小装不下大神,走人吧。因此,为了模拟出现实的真实性,我们必须弄一个真实的商业系统,把理论和实践融入到系统的架构过程中,这可以很好的体现出我们的思想路径。

相关文章

  • 03模型与驱动

    13 其中的关键核心点是,不同涉众的关注点的分割。我有我自己的关注点,你有你的关注点,不同的关注点汇聚到一起,而关...

  • 自动化测试-混合驱动模型的自我理解

    深刻的理解了自动化测试框架模型,数据驱动和关键字驱动,统称混合驱动模型 数据驱动框架,把数据与测试脚本进行分离,通...

  • 事件驱动模型

    观察者模式与事件驱动模型 观察者模式: 事件驱动模型 2.事件驱动模型 事件源 持有监听器列表,或者各种类型监听器...

  • python 自动化测试五种模型

    python 自动化测试五种模型,线性、模块化驱动模型、数据驱动模型、关键字驱动模型、行为驱动模型 通过录制或编写...

  • Struts2笔记

    Struts2笔记——Struts2的模型驱动(ModelDriven) 1. 模型驱动: 模型驱动是使用...

  • 2018-12-12

    day03 机器学习的过程: 以模型为驱动, 1、经典算法:线性回归,逻辑回归,决策树,支持向量机,条件随机场,K...

  • 社交电商凭什么要用户给你打call

    文:萧理查德 01 驱动分享模型第一篇《让用户主动分享引流的秘诀》――介绍驱动分享模型。第二篇《驱动分享模型:利益...

  • 如何构建数据驱动增长能力,助力企业数字化转型-创新增长大会

    数据驱动增长的思维与核心体系 增长黑客:用技术驱动整个用户生命周期 AARRR模型 获取、激活、变现、留存、推荐 ...

  • Netty线程模型及EventLoop详解

    作者: 一字马胡 转载标志 【2017-11-03】 更新日志 线程模型与并发 什么是线程模型呢?线程模型指定了...

  • Spring事件传播机制

        Spring是基于事件驱动模型的,事件驱动模型也就是我们常说的观察者,或者发布-订阅模型。理解观察者模式更...

网友评论

  • 知成:有深度,更有营养
  • 0a393d74d664:看得有点懵,不是程序员的都看得很吃力吧:joy:
    玩哲:@长风歌 哈哈,还好吧,学文科的都说看懂了。
  • hnliuyiyun:合成复用原则要换成单一职责原则
    玩哲:@hnliuyiyun回头再研究一下。
  • 玩哲:而架构,在一个软件项目中,是在最高级别思考与设计,考虑这一系列问题的。

本文标题:03模型与驱动

本文链接:https://www.haomeiwen.com/subject/gtxaixtx.html