zoukankan      html  css  js  c++  java
  • 软件架构的数据流总结(一)


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

    下续

  • 相关阅读:
    HDU 6071
    HDU 6073
    HDU 2124 Repair the Wall(贪心)
    HDU 2037 今年暑假不AC(贪心)
    HDU 1257 最少拦截系统(贪心)
    HDU 1789 Doing Homework again(贪心)
    HDU 1009 FatMouse' Trade(贪心)
    HDU 2216 Game III(BFS)
    HDU 1509 Windows Message Queue(队列)
    HDU 1081 To The Max(动态规划)
  • 原文地址:https://www.cnblogs.com/huty/p/8519350.html
Copyright © 2011-2022 走看看