洪水预报的模型系统及MVC模式

1、传统的模型实现方法 

近年来,面向对象方法越来越多的用于流域水文模拟过程。它具有符合系统的实际构成、信息隐蔽、数据抽象、继承性、动态联系等优点,也已逐渐成为流域仿真建模的重要方法。

对象及类的概念在建模、设计及实现过程中都是一致和完整的,并提供从分析、设计到系统实现的统一框架。虽然,大多数的应用程序开发都采用了面向对象的结构化设计思想,但仍然把程序的业务逻辑、结果表示、与数据库的连接管理以及安全等项事务集中在一个程序中,一旦应用逻辑发生微小的变化,往往要影响到相连的其它各部分。要开发一个类似的新应用,更要一切从头开始。

例如,在HEC-1流域水文模型中,对于每一个模拟过程都提出了多种计算方法,在实际应用时要依据计算目的、资料情况和使用者的经验进行选择。降水损失的计算方法有4种,它们分别是初损稳损法、曲线号法、贺坦法和HEC 变动损失法;流域汇流计算方法也有4种,它们是克拉克单位线法、斯耐德单位线法、水土保持局(Soil Conservation Service)SCS方法和运动波方法;河道洪水演算有3种方法,它们是马斯京根法、改进的蒲拉斯法和运动波河槽演算法。对于新安江模型虽然和HEC-1模型分别用不同的思路和计算方法实现径流的模拟,但在输入、输出及洪水演进模型中,3个子模块上都有重复。在传统的洪水预报模型系统的开发中,新安江模型和HEC-1模型各成独立的体系,互相之间难以做到代码重用。即使在HEC-1模型中,要做到以一种算法代替另一种算法,也要化费相当大的功夫,因为各种算法结构不同、使用的参数和变量不同,常常局部的变化要通过整个程序的修改甚至重写来完成。

由此可知,基于传统的开发方法建成的应用系统,在系统扩展性和可维护性方面都比较薄弱;应用系统在工作上各自为政,不同系统中公用的部分难以重复利用,大量的低水平重复开发造成资源的极大浪费;系统设计中,业务逻辑和非业务的其它部分的混合,使应用程序结构繁杂、缺乏层次性。因此,采用面向对象方法分析和设计系统时,需要从根本上改变传统的系统分析和设计方法。

2、网络环境下的洪水预报模型系统设计

洪水预报模型系统开发以开放的基础应用框架为基础,框架主要为开发提供读取参数信息、配置信息、建立系统调试和应用日志等功能。但是在具体的洪水预报业务的实现上,还会面临各种不同功能的类和对象的设计及创建工作,如何对这些元素进行组织,直接关系到整个系统的性能。MVC(Model-View-Controller)模式把一个面向对象的应用程序分成3个层次,很好地区分了系统中不同对象的职责,使应用程序专用的细节同用户界面无关。

在这里,以流域水文模型为业务基础建立一个基于MVC模式的洪水预报模型的Web应用系统。尽管模型中包括一系列连续的过程,对于决策者来说,他们只关心在人机交互的界面输入并提交一定的参数和定制后,获得什么样的输出结果和指标,并根据对结果和指标的分析做出相应的决策,至于软件其它部分的具体实现是不需要知道的。因此,很容易把这一系统用MVC设计模式来划分和拆装。

其中,模型层包括水文模型所涉及到的子模型及算法。它对用户来说是不可见的,对应于每一种算法,都对应着一个模型,保存了其中有哪些变量,采用什么参数,模型的算法以及运行该模型会产生什么样的输出。一旦确定了模型的结构,就可把模型开发为一个固定的组件。

表示层以浏览器的形式给用户展示输出结果的图形界面和向控制器输入人机交互信息的交互界面,但是并不负责响应用户的请求。在具体的洪水预报模型系统中,其作用就是显示参数定制,模型选择及数据资料选择等输入信息的界面,显示由模型层返回的输出及其它状态值的界面,显示方式主要有图、表、对话框、文字描述等。表现层实现的动态页面,给决策者提供决策所需的完整信息,同时也便于应用系统及其成果在网络上的共享。

控制层,对用户来说也是不可见的,它的主要作用就是管理与模型层及表示层之间的交互,实现用不同的方法触发模型的不同状态,并把这种状态反映给表示层以获得其更新。当用户改变了某个模型参数,或是更换了模型或数据资料的输入,这些动作并不直接作用于模型层,而是发送请求给控制器,并通过它再把请求发送给模型,模型就这一请求进行相应的处理,返回处理的结果并由控制器传递给浏览器(Web方式) ,从而可以在网络可及的任何地方看到模拟结果。



发表评论

You must be logged in to post a comment.