各位大虾,用SmallStruct结构开发数据库程序,效果怎样? 论坛好像没有人提到过?我想开发一个信息系统,苦于没有一个好的应用框架。
转:
这篇文章《SmallStruct3 指南》只限于对于基于SmallStruct3进行应用程序开发的一般性指导,所以并没有对不会对更深层的原理进行讨论。以下所提到的应用程序、Model、View、Controller,如无特殊说明均与SmallStruct3相关的特定结构,并且以下所提到的SmallStruct、框架如无特殊说明均为SmallStruct3的Alpha版本。一 应用程序的结构由于SmallStruct是用于(C/S结构)基本数据库的应用程序开发的框架,所以基于SmallStruct开发的程序都有特定的并且相似的结构,这一部分将对基本SmallStruct的程序的结构和组成进行一个简要的说明。一个最一般的基于数据库的应用程序通常将包括以下部分,它们都要有可以显示的介面部分,或者叫做GUI;其次要有实际的功能,也就时逻辑功能;最后是一个数据库用来保存一些有用的数据,并且有可能还用处理一些业务逻辑。用SmallStruct建立的程序具有所有这些部分,但是对这些结构进行了分类。View:这是用于显示的结构,它们对为程序提供某种有意议的显示方式与程序的使用者进行交流,通常它们即是一些精心排列的表格、编辑框、报表诸如些类的一些东西。Model:这是一些用于保存一些状态、执行一些逻辑功能的结构,它们为View提供数据而View则是以某种方式来显示这些数据,并且View会将一些状态保存在Model当中。Model也唯一用于访问数据的结构,它们知道怎样访问数据,也知道访问哪些数据。Model是不可见的,它们只能通过View来表现自己。Controller:这些结构用于接收输入,然后将这些输入定向到特定功能入口。它们响影事件后根据情况来决定怎样处理这些事件,能常只是简单的将事件包装成方法后传递给Model。 其它结构:例如用于保存数据库连接的Model,用于保存系统参数的SystemObject,以及一些由开发者定义的业务逻辑接口。二 一般的开发的流程 利用SmallStruc进行开发有一个相对固定的流程,第一步是建立一个数据库的连接,之后是建立一系列的Model,再建立一些View,再之后是安排这些View的访问方式,最后是对程序进行美工。这里没有提到测试,因为测试是一般性工作,它总是伴随着工发工作随时在进行。下面对这个流和进行详细的说明。1立数据库的连接SmallStruct使用DBExpress技术访问数据库,这意味着你只能访问ASA、Oracle、DB2、Borland InterBase、FireBird、Informix、SQL Server、MySQL这其中之一的数据。如果你需要访问其它的数据库或者现有的DBExpress技术不能满足你的需要,那么至少还有两个方法可以用来解决你的问题。其一:是寻找一些三方的DBExpress驱动。这很容易办到,从Borland的社区和Soruceforge都能得到,还有一些第三方厂商也会提供额外的DBExpress驱动。其二: 扩充SmallStruct以使用其它数据库访问技术,例如BDE、ADO、DOA或者ODAC。这其实很容易办到,因为SmallStruct并不依赖某种特定的数据访问技术,简单说来你只需从IS2DatabaseConnection派生一个接口并在其中定义一个类似于GetDBXConnection: TSQLConnection这样在方法,再从TS2DatabaseManager派生一个子类并实现你定义的接口,同时你需要覆盖TS2DatabaseManager的GetConnection方法,然后从TS2ServerDataModel派生一个子类并覆盖TS2ServerDataModel的InitModel和CloseModel方法。在这里我们使用SmallStruct预定的DBExpress技术进行讨论。那么你需要从TS2DBXDatabaseManager派生一个子类,之后对_Connection进行一些设置使之可以访问你的数据即可。2 建立Model 从TS2DBXServerDataModel派生一个或者多个子类,派生多少子类取决于你的数据库中有多少个实体以及你的程序有多复杂。每个从TS2DBXServerDataModel派生的子类都要覆盖GetPrimaryKeyName和GetCaption方法。GetPrimaryKeyName方法用于指定该实体的主键(当前版本只能使用单一主键),GetCaption用于指定实体名。当然,你还有设置_Dataset的一些属性,例如SQLConnection和每个字段的DisplayLabel。如果这个Model是只读的那么你还要覆盖IsReadOnly方法使它总是返回False,如果这个Model还需要执行一些业务逻辑功能,那么你需要从IS2BusinessObject派生一个接口并在其中定义你的功能,之后要认这个Model实现这个接口。3 建立View 一个程序中可能会用到不同的显示元素和风格,SmallStruct中有预定义的Grid风格。如果你的View可以修改Model里的数据那么需要从TS2AdapterDataGridView派生,如果这个View只是用来显示或者是一个ActionView用来执行一项业务功能,那么可以从TS2DataGridView派生,当然你可以扩充或者修改SmallStruct建立各种各样的View,但SmallStruct处了提供Grid风格的View,还有自由风格的,有用来显示报表的View,有用来显示Chart图形的View。一个程序中的显示元素不应过多,特别是商业应用程序,在一般情况下SmallStruct提供的View已经够用了。接下来需要覆盖GetCaption和InitView方法,GetCaption指定这个View的提示而InitView方法用于初始化这个View,通常GetCaption返回的是一小段说明性的文字,而在InitView指定View所用到的Model。如果这个View需要另一个View来显示更多的并且是相关的信息,那么就要覆盖GetChildView方法。还可以覆盖Action来为这个View指定一项对应对Model所实现的IS2BusinessObject子类型中的方法(一个View只能有一个Action,这不包括SmallStruct预定义的Action),在覆盖Action方法的同时还要覆盖GetActionHelp方法,GetActionHelp返回一段说明Action的文字。4 安排View的访问方式 当你所有的View都制作完成之后就需要让它们显示在屏幕上,你可以从TS2MainFrame派生一个子类来完成这件事,当然这只是一个可用的选择,你仍然可以自己作一个新的不同于TS2MainFrame的主界面。你要建立一些按钮、一些Panel以及一些图标,在这些按扭的单击事件中调用ShowPanel方法显示相应的Panel,而你的图标就放在这些Panel上,然后再在这些图标的单击事件中GetController.AppendView方法来显示你之前制作的那些View。5 定义TS2SystemObject的子类 你要定义一个TS2SystemObject的子类,SmallStruct是一个纯OO的框架,这个TS2SystemObject的子类是一个全局结构的,是全局变量的替代品,它保存所有会在SmallStruct中全局的、唯一的变量和结构。到目前为止一个简单的基于SmallStruct的开发流程讲完了,接下来会有一个例子,这是一个极其简陋的程序,没有什么有用的功能,它仅仅是一个例子,你可以修改和扩充这个例子来学习更多的东西。最后,我要对这个例子进行一点说明:所有以S2开始的单元都是SmallStruct的一部分,所有以App开始的单元都是应用的一部分,可以随意修改和替换。
App.Test.MainForm是主窗体。
App.Test.MainFrame是主界面,它是TS2MainFrame的子类。
App.Test.MyDatabase用于保存数据库连接,它是TS2DBXDatabaseManager的子类。
App.Test.MySystemObject是TS2SystemObject的子类。
你需要一个SQL Server 2000数据库,你要建一个名为Northwind的数据库,之后再从Northwind.Dat文件中恢复这个数据库,最后你还可能需要修改App.Test.MyDatabase单元让_Connection指向Northwind数据库。结束语好了,这篇文章结束,但这只是一个开始。当前的SmallStruct3仍处于Alpha测试阶段,有许多错误,还有一些功能未完成,但却可以用来建立程序了,因为框架和应用有较高的独立性,所以对框架的修改不会影响到应用,你可以现在就利用SmallStrut3进行开发,因为它已经具备了大部分功能,并且这些功能接口不会发生变化,当SmallStruct3的Release版本发布之后你只要利用新版本的框架对你的代码重新进行编译即可。在使用SmallStruct3之前,你需要安装Raize 3、ExpressQuantumGrid Suite 4.5和ReportBuilder 7