UML软件工程组织

构建基于.NET的管理信息系统
覃云 韩伯棠 王霞(转载自计算机世界报)
  对于B/S结构的管理信息系统而言,因其具有易用性、通用性和良好的可扩展性等优点而发展迅速,但是目前还存在一些难以克服的缺点,如基于HTTP协议的数据传输量大、安全性难以保证,报表系统的部署困难等,而传统的C/S结构的管理信息系统具有较强的事务处理能力,能实现复杂的业务流程。因此,在当前采用C/S结构与B/S结构混合的方式来建设企业的管理信息系统还是一个不错的选择。同时,.NET技术的出现和发展也为开发这种混合结构的管理信息系统提供了有力的支持。
.NET架构
  在以往的信息系统开发过程中,如果采用的是C/S结构就需要有适合C/S结构的一整套开发工具以及运行环境; 而如果采用B/S结构也需要有相应的一套工具及环境,这两种方式往往互不相容。而在新近推出的.NET架构中,可以在统一的环境下开发C/S和B/S混合结构的管理信息系统。这主要归功于.NET技术把Windows应用程序与Web应用程序完全统一为一个完整的开发运行环境。
  .NET构架由三大核心组件组成,它们是XML、Web Services、.NET FrameWork。其中,XML是可扩展标记语言,已成为数据交换的标准。Web Services之间采用XML进行数据交换,未来的许多软件和网站提供的服务都会作为Web Services的一部分,在互联网的范围内共享,从而大大节省开发的费用,提高软件的复用性,同时把开发人员的注意力集中到开发更新的应用上。管理信息系统的开发,特别是C/S与B/S混合结构的管理信息系统的开发,也必将在Web Services的促进下进入一个崭新的时代。以下是基于.NET环境实现的C/S与B/S混合结构的信息系统架构:
基于ADO.NET的数据访问
  数据处理一直是大多数管理软件的关键任务。在.NET中新推出的ADO.NET是对ADO一个跨时代的改进,它提供了平台互用性和具有伸缩性的数据访问能力。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定是ADO.NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是运行在其他平台上的任何应用程序。因而ADO.NET数据访问模型非常适合C/S与B/S混合结构的信息系统中,客户端可以通过多种方式来进行数据库的访问,而不必采用不同的方法。
  和ADO相比,ADO.NET最显著的变化就是ADO.NET是完全基于XML的,以至于在ADO.NET中取消了Recordset对象。这个特性完全满足了混合结构中B/S部分Web页面通过Internet访问数据的需要,而且通过C/S部分和B/S部分的合理分工、协调工作,很好地解决了B/S结构中因在Internet上传输大量数据而造成的通信效率低下的问题。在传统的C/S应用程序中,RecordSet将建立与数据库的连接,并在应用程序运行过程中使连接保持打开状态,这样会占用大量的内存。而在基于.NET的C/S与B/S混合结构的管理信息系统中,可以采用ADO.NET,这些RecordSet的功能被拆分成了三个部分:DataReader、DataSet和DataSetCommand。
  DataReader对象完成基本的读取数据功能,而在ADO中,类似的功能是由服务器端光标(Forward-only,server-side)来实现的。例如,在公共模块中我们定义一个函数,用来从字典表中读取记录,填充下拉式列表框。这种简单的读取数据的功能可以使用DataReader对象来完成:
Function FillComboFromDB(ByRef ctl As System.Windows.Forms.ComboBox, ByVal strSql As String, ByVal con As OleDb.OleDbConnection) As Boolean
Try
myReader = myCommand.ExecuteReader(CommandBehavior.Default)
While (myReader.Read())
strData = myReader.GetString(0)
ctl.Items.Add(strData)
End While
myReader.Close()
Catch ex As System.Data.OleDb.OleDbException
End Try
Return True
End Function
  使用DataSet和DataSetCommand能够在客户端创建数据集合的缓存,而不是始终保持和服务器的连接,并对它们进行操作,这比在ADO中应用客户端光标简单多了,而且很好地解决了RecordSet占用大量内存的问题。
  因为ADO.NET的主要组件DataSet是从数据库中检索到的数据在内存中的缓存,所以我们可以利用DataRelation对象来对多张相关联的表同时进行操作,也可以利用UniqueConstraint类和ForeignKeyConstraint类在DataSet中实施数据的完整性操作。如果在应用程序中,只想清楚地显示两张具有主从关系的数据表中的关联数据,使用DataRelation对象在DataSet中加入这些表并建立关联十分方便。例如,我们要显示订单以及订单明细这两张表的数据,可以进行如下的操作:
Dl=NewDataRelation(“Order”, ds.Tables(“SM_OrderHead”).Columns(“OrderID”), ds.Tables(“SM_OrderList”).Columns(“OrderID”))
ds.Relations.Add(Dl)
dr = ds.Tables(“SM_OrderHead”).Select(“dtDate>=’”& begin & “’”, “OrderIDASC”)
For i = 0 To UBound(dr)
cobOrderList.Items.Add(CStr(dr(i)(“OrderID”)) & “” & CStr(dr(i)(“dtDate”)))
drChildren = dr(i).GetChildRows(Dl)
For j = 0 To UBound(drChildren)
cobOrderList.Items.Add(“” & CStr(drChildren(j)(“cGoodsID”)))
Next
Next
结束语
  开发基于B/S结构的软件系统是我们努力的目标,但是目前看来,C/S与B/S这两种结构在实际开发过程中都必不可少。从.NET或者Java等新一代技术的发展角度考虑,它们都具有越来越强大的支持Web应用的能力,并且各有所长。但是从与Web的结合上,从开发环境的开放性上,从开发工具的应用性上,从数据库操作上,以及从完善的报表工具上,.NET技术无疑是开发C/S与B/S混合结构管理信息系统新的利器。

版权所有:UML软件工程组织