zoukankan      html  css  js  c++  java
  • 论软件体系结构风格以及应用

          摘要:2013年7月,我参加了信息检索系统的开发,在这次项目中,我担任系统设计和开发的工作。该项目是在部门SHARE POINT 的基础上,集SHARE POINT种各文档的分类检索,预览,下载和显示于一体,提供类似于百度搜索和百度文库预览的效果。本论文结合作者的实践,讨论了软件体系架构风格在信息检索系统中的运用,主要是数据流风格的使用。通过运用合理的软件体系架构,我们的项目取得了成功,不但提高了部门的办公效率,而且在一定程度上提高了部门的信息化水平。

    本论文先介绍常见的五种类型的体系风格,然后介绍信息检索系统的情况,接着论述在这次工作中运用到的软件体系架构的原因,以及取得的效果,最后讨论可以改进的地方。

                                                                                                             正文

     软件体系结构是某一特定领域中系统组织的惯用模式。体系结构定义了一个家族,即一个体系结构定义了一个词汇表和一些约束。词汇表包括构件和连接件类型,约束主要是描述这些构件和连接件如何组合起来。

     常见的软件体系架构有如下五种:

    1.      数据流风格:包括:管道过滤器风格,批处理风格。

    2.      仓库风格:包括数据库,黑板系统和超文本。

    3.      调用返回风格:分层风格,主程序子程序和面向对象风格。

    4.      虚拟机风格:包括解释器,和基于规则的系统。

    5.      独立构件风格:包括进程通讯和基于事件的系统。

    管道过滤器风格,是数据流风格的一种,这种风格由称之为管道和过滤器组成,其中过滤器为构件,提供输入和输出的接口,主要用于数据的过滤盒处理。管道为连接件,用于连接各个过滤器。每一个过滤器无需知道上一个过滤器的实际处理细节,便可以接收到来自上一个过滤器的数据进行加工,加工完毕,将数据通过管道传输给下一个过滤器。常见的例子有UNIX系统的SHELL编程。管道过滤器风格的优点主要有如下几个:1)由于每一个过滤器都是一个独立的构件,所以可以方便的更换。2)具有一定的并行性。缺点有如下几个:1)不适合及时的交互式设计。2)由于缺乏统一的通讯标准,数据的传输效率可能比较不高。

    面向对象风格,是将数据的表示方法和它们对应的操作方法封装在一个对象中。对象和对象之间通过函数和过程调用来交互。这种风格的构件就是对象,连接件就是函数和过程的调用。

    基于事件的系统,这种系统,有点类似设计模式的观察者模式,由构件公布或者广播一个或者多个事件,其他构件的构件在此构件的事件上注册。当这个事件被触发时,立即通知在这个事件上注册的过程。这种风格的构件是前面提到的构件,连接件是过程的注册。

    分层系统是一个层次结构,每一层为上一层服务,并作为下层的客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻层可见。这样,系统中的构件在一些层中实现了虚拟机(在另外一些层次系统中层是部分不透明的)。连接件通过决定层间如何交互的协议来定义,其拓扑约束包括对相邻层间交互的约束。

    这种风格支持基于可增加抽象层的设计。这样,允许将一个复杂的问题分解成一个增量步骤序列的实现。因为,每一层只影响两层,同时只要给相邻层提供相同的接口,允许每次用不同的方法实现,同样为软件重用提供了强大的支持。

    在部门的日常办公中,用到了SHARE POINT进行部门文档的管理,包括各种设计素材图,EXCEL报表,WORD文档,CAD制图,各种JPG等电子图和复印件,PPT等,这些都以二进制存储在了SHARE POINT的SQL SERVER数据库中。由于这些文档的种类繁多,急需一套能够在多种文档中进行查询,检索和提供下载,能进行在线阅读的一个文档检索系统。

    经过分析,系统的第一步是分词,即对输入的查询关键词进行分词,我们选用了中科院的ICTLAS,如输入”截拳道李小龙“,那么这个词将会被智能分词为:”截拳道“和”李小龙“,系统将会检索包含任意两个词之一的记录。系统的第二步是查询,在这里,我们需要根据第一步的分词后的关键词,在SQL SERVER中编写模糊查询语句,查询相关的记录,例如:SELECT 字段1,字段2,字段3 FROM 表 WHERE COLUMNNAME  LIKE ‘%KEY%’.系统的第三步是进行反序列化,因为文档都是以二进制的格式存储,所以我们需要根据第二步的查询结果进行反序列化成对应格式的文档,如DOC,PPT,XLT等格式。第四步是格式转换,即将第三步各种格式的文档统一转换为PDF。在这里,我们使用了第三方的DLL,叫做APOSE。这是一款非常好的文档格式转换构件,能在各种流行的文档格式中进行完美的转换。最后一步就是显示,在这里我们选用了一款基于HTML5类似百度文库的阅读器显示。

    上述五个处理步骤,前一个步骤的输入是下一个步骤的输入,每一个步骤负责各自的处理。查询词首先被分词,然后查询检索,接着反序列,然后是转换格式为PDF,最后是显示,数据流在管道中流动,如同批处理一般,故比较适合数据流风格,图示如下:
                        
                

    系统中有需要改进的地方,如最后一步的显示,因为是基于HTML5,所以浏览器的兼容性不是很好,一般只能在支持HTML5的浏览器上进行浏览。所以这个地方也是以后要改进的一个地方。因为采用了批处理的架构风格,所以以后要来修改也比较容易。

  • 相关阅读:
    关于IE6不能兼容LCUC使用的PNG透明图象
    rmvb压制中高级技巧
    不错的课件网站
    C#程序多用户只启动一个进程的方法
    不可想像的加密光盘复制工具
    检测远程URL是否存在的三种方法
    请哪里有英文单词单复数转换的代码?
    一些感想,欢迎拍砖
    Some thoughts on my own O/R Mapping or Code Generation tools
    有了net send,谁还用IM?
  • 原文地址:https://www.cnblogs.com/wangsanfeng/p/9109601.html
Copyright © 2011-2022 走看看