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

原创 2015年07月07日 15:14:21


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并行访问时需要特别的小心。

下续

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/lg1259156776/。

软件工程之数据流图

数据流图   数据流图( Data Flow Diagram , DFD )以图形的方式描绘数据在系统中流动和处理的过程,它只反映系统必须完成的逻辑功能,所以是一种功能模型。...

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

14. Interpreter / virtual machine (解释器/虚拟机) 典型样例:Java 虚拟机,Rule-based systems,脚本语言(JavaScript) ...

理解Flink(一):数据流编程模型

抽象级别Flink提供了不同的抽象级别来开发流/批处理应用程序。 最低级抽象只提供有状态的流。它通过流程函数(Process Function)嵌入到DataStream API中。它允许用户从一个或...

数据流分析(一)

引子编译器后端会对前端生成的中间代码做很多优化,也就是在保证程序语义不变的前提下,提高程序执行的效率或减少代码size等优化目标。优化需要依靠代码分析给出的“指导信息”来相应地改进代码,而代码分析中最...

软件架构风格整理(1 数据流风格)

1         数据流风格1.1      批处理序列批处理风格的每一步处理都是独立的.并且每一步是顺序执行的.只有当前一步处理完后.后一步处理才能开始.数据传送在步与步之间作为一个整体.(组件为...

【VS开发】【图像处理】基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果

基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果      白平衡是电视摄像领域一个非常重要的概念,通过它可以解决色彩还原和色调处理的一系列问题。白平衡是随着电子影像再现色...

【科普杂谈】会写程序还不够,硅谷杰出软件工程师都有的 5 种能力

曾任职于Google和Quora等公司、现任Quip软件工程师的Edmond Lau,于《The Effective Engineer》一书中访问任职于Facebook、Instagram和Goo...

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

8. Blackboard(有点像老师叫学生上黑板写东西,而不是学生随意上黑板写) Blackboard是Knowledge Sources的通用数据结构,能够代表问题空间的所有状态,当需要分...

Android开发软件架构思考以及经验总结

欢迎关注我的知乎:井方哥 前言 架构设计,到底是什么呢?基于这段时间的学习和自己的一些思考,我认为架构是基于产品和技术所达成的一种共识。我不是专业的架构师,也不是经验老道的开发者。本文目的有三...

Android 开发软件架构思考以及经验总结

Android 开发软件架构思考以及经验总结,详解讲解了实际项目中的Android架构经验...
  • AMEPRE
  • AMEPRE
  • 2017年01月24日 16:11
  • 1015
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件架构的数据流总结(一)
举报原因:
原因补充:

(最多只允许输入30个字)