中国开发网: 论坛: 程序员情感CBD: 贴子 39320
有狐
我再贴些详细的东西,请你指教指教
我的系统是HTML + ASP + COM+ + ADO + SQLSERVER + XSL + XML

SchemaDocument的大体样子:

<schemas>
<schema name="新增数据">
<element name="data" to="TData">
<attribute name="id" to="DataId" required="false" type="GUID" nullable="false" auto="NEWID" title="数据ID"/>
<attribute name="name" to="DataName" required="true" type="STRING" nullable="false" title="数据名称"/>
<attribute name="desc" to="DataDesc" required="true" type="STRING" nullable="true" title="数据描述"/>
<attribute name="createuser" to="CreateUser" required="false" type="GUID" nullable="false" auto="USERID" title="数据创建者"/>
<attribute name="createtime" to="CreateTime" required="false" type="DATETIME" nullable="false" auto="DATETIME" title="创建时间"/>
</element>
<implementation name="SP_DataInsert">
<parameter name="XMLData" type="varchar" auto="XMLDATA" direction="1"/>
</implementation>
</schema>

<schema name="修改数据">
<element name="data" to="TData">
<attribute name="id" to="DataId" required="true" type="GUID" nullable="false" auto="NONE" title="数据ID"/>
<attribute name="name" to="DataName" required="true" type="STRING" nullable="false" title="数据名称"/>
<attribute name="desc" to="DataDesc" required="true" type="STRING" nullable="true" title="数据描述"/>
</element>
<implementation name="SP_DataUpdate">
<parameter name="XMLData" type="varchar" auto="XMLDATA" direction="1"/>
</implementation>
</schema>

<schema name="删除数据">
<element name="data" to="TData">
<attribute name="id" to="DataId" required="true" type="GUID" nullable="false" auto="NONE" title="数据ID"/>
</element>
<implementation name="SP_DataDelete">
<parameter name="DataId" type="GUID" auto="@id" direction="1"/>
</implementation>
</schema>

<schema name="获取数据" result="XMLDATA">
<element name="data" to="TData">
<attribute name="id" to="DataId" required="true" type="GUID" nullable="false" auto="NONE" title="数据ID"/>
</element>
<implementation name="SP_DataSelect">
<parameter name="DataId" type="GUID" auto="@id" direction="1"/>
</implementation>
</schema>

<schema name="查询数据" result="XMLDATA">
<element name="condition" type="CONDITION">
<field name="name" to="DataName" type="STRING" />
<field name="createuser" to="CreateUser" type="GUID" />
</element>
<implementation name="SP_DataQuery">
<parameter name="condition" type="STRING" direction="1"/>
<parameter name="pagemode" type="INT" direction="5"/>
<parameter name="pagesize" type="INT" direction="5"/>
<parameter name="pageindex" type="INT" direction="5"/>
<parameter name="pagecount" type="INT" direction="6"/>
<parameter name="totalcount" type="INT" direction="6"/>
</implementation>
</schema>
</schemas>

//parameter的direction属性:1=INPUT 2=OUTPUT 1+2=INPUT+OUTPUT 4=RETURN ...
//RETURN表示该参数值应该包含在结果XML中

前端ASP开发人员组合的命令文档样子:

<command name="新增数据">
<data name="A" desc="B"/>
</command>

<command name="修改数据">
<data id="{13078117-9037-4215-9C23-9EF85E33F13B}" name="AA" desc="BB"/>
</command>

<command name="删除数据">
<data id="{13078117-9037-4215-9C23-9EF85E33F13B}"/>
</command>

<command name="获取数据">
<data id="{13078117-9037-4215-9C23-9EF85E33F13B}"/>
</command>

<command name="查询数据">
<condition type="AND">
<condition field="name" type="LIKE" value="A"/>
<condition field="createuser" type="=" value="{13078117-9037-4215-9C23-9EF85E33F13B}"/>
</condition>
</command>

-----------------------------------------------
另外还有一个XSL,用来把Command文档和Schema文档结合转换出用于执行的文档
XSL比较大就不贴了,反正你比我明白
转换后的文档大概是这样的:

<commands errorcode="0" errordesc="" errorhelp="">
<command processor="SP" object="{00000000-0000-0000-0000-000000000000}" action="2" xsl="结果文档返回后应用的XSL" xslpath="可选的XSL文件的路径">
<commandtext>SP_DataUpdate</commandtext>
<parameters>
<parameter name="XMLData" type="varchar" direction="1">
<TData DataId="{13078117-9037-4215-9C23-9EF85E33F13B}" DataName="AA" DataDesc="BB"/>
</parameter>
</parameters>
</command>
</commands>

COM+组件使用ADO根据这个文档进行数据库操作

commands.error... 表示转换后的错误信息,就是符不符合Schema的规则
command.processor表示ADO是执行存储过程还是SQL语句
command.object, action 表示权限信息,即操作对象和操作码,COM+组件判断,如果权限不通过就不执行
权限在Schema里也是有规定的,不过我没在上面的Schema里写进去
command.xsl, xslpath也是在Schema里规定的
commandtext就是存储过程名称或SQL语句了,目前我都是用存储过程,所以SQL的规则没写在Schema里
parameter就是执行存储过程或SQL语句的参数

大概意思就是这样了,不知道我说明白没有 :)

这些XML的元素和结构规则现在看上去似乎比较乱,可没办法,时间有限,不能很细的推敲
不过现在我们已经做了很多功能了,都没有问题

我感觉这样类似的架构很有意思
有意思的地方就在于,可以做一个工具,来维护这个Schema
而这个Schema还可以扩展,到我目前的设计为止,已经能满足我的系统的需要了

如果把数据库表以及表之间的关系也由工具维护(就类似PowerDesigner,ERWin之类的功能),
如果能把规则分析清楚,就可以由用户通过界面定义功能,自动生成每个功能的Schema,
估计80-90%的存储过程和ASP页面可以自动生成
(肯定有些逻辑复杂的界面是不能自动生成,需要手工整合命令),然后就只要美化美化界面就行了。

可惜我这个项目时间有限,来不及最后自动生成这一步,Schema,页面命令大都是手工敲的


我对XData不是很了解,也不清楚我这个算不算得上”数据网关“了
不过我觉得两者肯定是类似的,难得有JoJo你这样的高手,
我就献丑拿出来,大家一起探讨

封闭开发半年多了,最近又天天通宵,脑子快不好使了,说得很乱,别介意
我的MSN是:youhoo2000@hotmail.com
其实一般都不开的,不过如果你愿意,可以给发邮件到这个地址,邮件我还是经常看的
你的Blog地址是?

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录