日期:2014-05-20  浏览次数:20950 次

架构设计中的问题,急求高手指点!!
由于工作需要,现准备在.net、oracle下完成二次开发平台,初期主要实现以下功能:

1、平台内实现对数据库的可视化操作
  比如平台内实现对创建表、创建存储过程等
  重要的是实现对数据库的映射功能,达到数据对象与业务对象的直接关联,而不必直接与数据库操作

2、平台内实现控件的自定义操作,例如可以象.net的控件那样拖拽出来即自动生成代码

思考很久,实在没发现更好的方法,请高手指点!

------解决方案--------------------
1、平台内实现对数据库的可视化操作 
比如平台内实现对创建表、创建存储过程等 
重要的是实现对数据库的映射功能,达到数据对象与业务对象的直接关联,而不必直接与数据库操作 主要是这个吧?你可以看下Linq to Sql或是用NHabinater解决。

2、平台内实现控件的自定义操作,例如可以象.net的控件那样拖拽出来即自动生成代码 
这个你可以看下DesignerHost对象...,你到Google上search一下,有相关的例子如Form Designer
------解决方案--------------------
二次开发平台一般都是有针对性地对较常用的业务处理进行封装...浪潮的GSP定位就是电子化政务,ERP二次开发平台的定位就是ERP...他们的目标和用户都很明确,即让开发能力有限的中小软件公司能以快速、低成本的方式向他们的客户提供解决方案,微软也有类似的平台,如Dynamics CRM、Content Management Server等...

但你这个思路只是个增强型开发工具,一次开发都没有谈什么二次开发?充其量是个Visual Studio Plus...用户用你这个平台开发和以前有多少区别?反而他们还要花成本来学习(即使你不收费时间成本也要的)...你还不如缩小范围,只做个Oracle Management Studio这样的Visual Studio组件插件,做得好也许微软还有兴趣收购...泛泛地想搞个什么业务都不做的所谓开发平台是没有市场的...
------解决方案--------------------
首先要说的这是一个巨大的工程,楼主要有足够的资源。

对于第一个问题实际上楼主应该是需要一个类似业务实体设计器,微软的LINQ就干这个的,如果你还要单独实现可以参考之,如果需要考虑业务含义,你需要一个元数据,元数据就是来描述数据的数据,也就是需要一套数据来描述你的业务数据,当然这个元数据是一个抽象概念,需要具体的实现,具体实现则取决于你的ORM方式,你可以将元数据保存在数据库里面(元数据库)或者保存在实体上编译到dll里面。

对于第二个问题实际上是一个界面设计器,界面设计器你可以考虑集成到VS里面,使用VS的界面设计器,这样你能节省很多时间。自动生成代码则依赖于你的“编译器”,这里的编译器是一个抽象概念,该编译器可能和前面描述的元数据相关所以是一个具有业务含义的编译器。


呃~~~~细说下去还有很多很多,上面是大概的思路,我也想做这么个东西,内容太多了,没有精力做,而且我想微软肯定也在弄这东西(DSL)。
------解决方案--------------------
说过了,仅仅做到这2点不难,UI设计应该没问题吧,仿都仿出来了,主要是思路:
1、关于数据库设计:你的想法反了,应该是数据库映射你的数据模型和方法模型,而不是映射数据库;
2、关于界面设计:做一次隔离就行了,界面拖拽生成代码模型(预览可以用纯html代码呈现),然后再由模型生成实际代码。
------解决方案--------------------
查了下UI设计的资料:
表单设计支持:DesignSurface;
代码对象模型:CodeDOM;

至此,已是我能提供给你的最大帮助了,
到现在还不知道楼主的动机是什么,如果真的想做开发平台的话,
那你们的思路有很大的偏差,你所提到的2点在整个开发平台构建中可以说是技术含量最低的工作了,
这应该是在学校里应该掌握的基本技术


------解决方案--------------------
说实话,技术不是问题,设计也不是问题,就是感觉需求有点模糊,
1,创建存储过程

这个需求可大可小 
是根据业务模型模板,自动生存存储过程还是自己编辑代码存到数据库?

2,对数据库的映射功能,达到数据对象与业务对象的直接关联,而不必直接与数据库操作

这个映射有规范吗?比如业务对象中的特定属性如何编码转义到数据对象的属性(如加密存储)。。。

重要的是你的规范,这里的规范设计才是核心

3,平台内实现控件的自定义操作,例如可以象.net的控件那样拖拽出来即自动生成代码

这个更模糊,生成代码拿到别的地方使用,还是自动编译dll,是wcf还是winform还是web控件,亦或是html加上js

最后告诉你你的问题的核心不再界面如何操作,而是这些操作所依赖的规范设计,逻辑设计,和知识架构