关闭

软件架构的数据流总结(一)

标签: 架构软件structure总结
1811人阅读 评论(0) 收藏 举报
分类:


1. Model-View-Controller(MVC框架)

This architecture is used in simpleGUI applications,不管是MFC,还是Matlab,亦或是android,基本上关于界面的开发,都是基于这种软件框架。看来还有web应用程序亦是如此。事件驱动模型。

MVC组件创建的步骤:1) 构建模型(model),然后通过引用包含到组件当中;2)创建view,传入模型的引用;3)作为change listener,view与model进行注册;4) view创建controller作为自己一个引用,并将引用传递至model。

Mostoften you don't need to build such an architecture from scratch. Thearchitectures usually come with visual programming environments (like VisualC++, JBuilder, etc. etc.)

2. Presentation-Abstraction-Control (PAC框架)


几乎大部分现代的复合GUI设计都是基于此软件架构(loosely)。它是MVC组件框架的进一步发展,MVC只能限制在简单的GUI设计:一个或者多个views在一个相同的模型上。而PAC可以通过继承、hierarchical structure来实现复合的GUI设计。我想MFC的设计大致类似此架构。

实际上,我们并不需要真的按照这种架构去从头开始设计,而是大部分的GUI设计都已经提供了这种框架,而理解这种框架对于GUI开发是有益处的。


3. Pipe and Filter(管道过滤器)

//实际上这个已经总结过了。

在体系架构中,Pipe and Filter(管道过滤器架构),如下图所示,所有的Filter并行执行,Pump 或者Producer是data sources,可以是静态的文本文件,也可以是任何输入(比如键盘、网络数据等等); Sink 或者 Consumer是数据目标(data,target),可以是另一个文本文件,或者是数据库、计算机屏幕等。Pipe即是connector,在filter之间传递数据,应当具有data buffer(数据缓存)的作用,以匹配适应filter的处理速度;而Filter则是一个个处理单元,它接收来自pipe的数据,并进行处理(filter or transform),Filter可以有N多个input Pipes,也可以由N多个output Pipes。


典型的应用案例:

Unix编程:一个程序的输出linked to(connected)另一个程序的输入;

DSP6678:一种数据流(data stream)的架构,每个core(内核)可以作为一个Filter,而共享内存等可以作为Pipes。这是DSP多核编程的一种常用架构。

编译器:连贯的过滤器进行词汇分析、语法分析、语义分析和代码生成等。



基于这样的架构(software architecture),所有的filter都可以在不同的线程(thread)、coroutines或者不同的机器上执行,可以是软件上或者是硬件上(FPGA)实现。

缺点:

1). 很明显,当Filter在等待它接收到所有的data并开始执行前,Pipe的有可能databuffer 溢出或者发生死锁。

2).管道的数据类型可能会使得过滤器需要进行解析,这将slow down processing speed。如果构建了不同数据类型的管道,则该管道将不能链接到任何的过滤器上。

4. layered system(分层系统)


分层思想是操作系统软件一个非常重要的哲学思想。分层一般是人们解决复杂问题的一种手段。每一层都向上层提供透明的服务,所谓“透明”就是指屏蔽具体的细节,只需按照提供的接口规范进行操作就可以。“层”就是抽象出来的概念,比如操作系统就是通过抽象屏蔽硬件上的差异和繁杂,使得用户在上层使用计算机。


另一个典型的应用就是OSI与TCP/IP分层结构。如下图。分层思想常用于operating systems 和 communication protocol上。


当系统出现不同的功能级别时,底层的操作比较繁杂,因此你希望通过一次彻底的分层抽象一劳永逸地把层次建好,再次开发时仍然可以使用,因此只需从底层开发一次,把分层结构建好,就可以sort the rest out。其实我比较喜欢的就是关于驱动开发,其哲学思考就在此,一次开发完毕,就可以摆脱底层的开发,从而可以站在高层进行开发,一劳永逸。

另外,分层思想的不断抽象让我联想到了神经网络(特别是deep learning),也是在不断地抽象,比如从底层的像素pixels,到edge抽象,再到object parts(combination of edges),再到高级的object models,不也是一层层的进行特征抽象转换吗?能够把握住哲学思想,总会有惊奇的发现。

存在的问题也很明显,灵活性是不是受到影响?层与层之间的接口必须固定,这就造成了在灵活性上的一定限制。但是,好处还是远远大于坏处的。我就非常赞赏这个分层思想。有时候固定可能比灵活性更好。

5. Microkernel(微内核架构)


是操作系统的一个基,来适应操作系统的剧烈变化。这种架构实际上是分层系统的一个特例。包含两个adapters,较低的层Microkernel用来屏蔽硬件特别的模块,较高的层叫做适配器(Adapter)用来屏蔽系统特别的模块。Microkernel包含操作系统所需的绝对最小功能,它是平台依赖的,基于Internal Server来实现。而Adapter则用来实现可移植,当改变External Server时,都不用改变之上的应用程序。

6. Client-Server / N-Tier Systems


N-Tier 体系架构实际上是C/S +分层体系的联合。C/S架构包括2-Tiers,客户端发起通讯,服务器提供服务。以三层的架构为例,first tier,即presentation tier,the client或者front-end(web前端),负责处理与用户的交互。通常的client由一些动态的HTML pages构成,用户可以通过webbrowser进行访问。Second or application tier,即server或者back-end,或middleware(中间件),处理client传来的用户请求,它虽然可以处理所有功能,但并不存储persistent data(长存数据),一般需要连接database服务器。也就是third tier,database tier,包含了数据库管理系统来管理长存数据。在第二层或第三层,由于scalability(可伸缩性),load-balancing和redundancy(冗余性)等原因,可能有多个应用实例(instances),就是说,增加了额外的设备来做同样的事情。虽然使得服务器更加强大,但有可能引入同步问题。

典型应用:web-applications。一般开发都是基于现有模型,要么开发前端应用,要么开发后端代码,嵌入到框架下就可以了。Client与client之间不是直接交互,而是通过中间人或者server转发等,通讯一般是via a network。

7. Repository(典型的database存储架构)

Compiler Use a repository.

Databased are repositories. 尽管数据库的所有客户端都在同时请求,database需要实现锁机制来保证repository的完整性。会有同步问题,当一些Knowledge Sources并行访问时需要特别的小心。

下续

0
0
查看评论

数据流分析(一)

引子编译器后端会对前端生成的中间代码做很多优化,也就是在保证程序语义不变的前提下,提高程序执行的效率或减少代码size等优化目标。优化需要依靠代码分析给出的“指导信息”来相应地改进代码,而代码分析中最重要的就是数据流分析。另外数据流分析是程序静态分析的基础。所以掌握数据流分析对编译后端极为重要。 何...
  • dashuniuniu
  • dashuniuniu
  • 2016-02-21 17:25
  • 4677

ARM体系结构(二)

ARM体系结构第二篇,主要理解CPU的内存接口,ARM启动过程。内存映射S5PV210属于Cortex-A8架构,有32位地址线和32位数据线,所以CPU的地址空间为4G,但是由于使用了统一编址,外设占用了一部分地址空间,实际供内存使用的地址空间将小于4G,那么对于这个4G的地址空间的分配,就是内存...
  • u012741741
  • u012741741
  • 2016-06-25 22:25
  • 4069

ARM学习之图解ARM

arm developer’s guide图:嵌入式arm的基本架构 图:应用软件运行在arm硬件上的抽象图 图:arm memory remap 图: arm内容数据流模型 图:arm在用户模式下可用的寄存器 图:图解状态寄存器 图:完整的arm寄存器集合 图: arm指令...
  • viewsky11
  • viewsky11
  • 2016-11-29 23:15
  • 975

软件架构的数据流总结(二)

8. Blackboard(有点像老师叫学生上黑板写东西,而不是学生随意上黑板写) Blackboard是Knowledge Sources的通用数据结构,能够代表问题空间的所有状态,当需要分离的数据结构时,Blackboard可以分开为多个面板(panels)。Knowledge Sour...
  • LG1259156776
  • LG1259156776
  • 2015-07-08 11:13
  • 1082

软件架构的数据流总结(三)

14. Interpreter / virtual machine (解释器/虚拟机) 典型样例:Java 虚拟机,Rule-based systems,脚本语言(JavaScript) 原理:Program or Script加载到解释器,创立Program和环境的链接。解释器从程序中...
  • LG1259156776
  • LG1259156776
  • 2015-07-08 13:07
  • 1209

Soot数据流 -- 数据流框架

1.数据流分析框架关键步骤。 个人的问题:  什么叫做数据流分析?为何将下列问题作为关键步骤? 关键问题及步骤(soot生存手册中提到): 1.1. 决定分析的本质是什么:是否向前后者向后的数据分析?是否考虑分支,还是不进行考虑?等等 1.2. 确定自己想进行如何粗略的估计:是可能的...
  • TheSnowBoy_2
  • TheSnowBoy_2
  • 2016-06-21 22:33
  • 918

MVC、MVVM和单向数据流的对比

今天听了部门的高T分享的react和其他框架思想的对比,真的是受益匪浅,所以特地把高T分享的总结一下。前端开发本质上是一种展现层开发,我思考了一下这句话,这句话用人话说就是前端开发本身就是写界面的。但是别人能把写界面的能总结成下面一个循环,我发现这真的是能力了。如下图,有略微的改动: ()下面就开...
  • woshinannan741
  • woshinannan741
  • 2017-07-24 19:30
  • 806

大数据流式分析系统框架(日志处理系统)

Flume+Kafka+Storm+Redis Flume(日志收集系统)可以理解为一个日志系统与消息组件之间的过渡端。负责日志数据埋点。 Flume的核心本质一定要结合Log4j和消息组件使用,由于其会产生大规模的日志数据,所以能够承受flume...
  • jiashun_
  • jiashun_
  • 2017-06-25 19:56
  • 965

软件工程中的那些图:系统流程图,程序流程图和数据流图

软件工程看完后,开始着手写有关机房收费系统的软工文档。可是其中的各种图把我搞得头疼,于是我把软件工程中提到的那些图总结了一下,还望众位大神指正! 系统流程图(System Flowchart):是描绘系统物理模型的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文件、数据...
  • haovip123
  • haovip123
  • 2014-02-12 20:23
  • 41590

软件架构的数据流总结(一)

1. Model-View-Controller(MVC框架) This architecture is used in simpleGUI applications,不管是MFC,还是Matlab,亦或是android,基本上关于界面的开发,都是基于这种软件框架。看来还有web应用程序亦是如...
  • LG1259156776
  • LG1259156776
  • 2015-07-07 15:14
  • 1811
    个人资料
    • 访问:1901549次
    • 积分:22249
    • 等级:
    • 排名:第391名
    • 原创:271篇
    • 转载:946篇
    • 译文:3篇
    • 评论:192条
    博客专栏
    最新评论