资源推荐:代码自动生成、Com开发、串行化反串行化、UI等太多了
本帖最后由 zhou13816878600 于 2009-06-07 16:21:50 编辑 图片等,贴不出来,更详细内容请在此地址下载:http://99ef.com/我的技术概要.doc
本人目前刚到上海,赋闲在家,坐待识珠之慧眼,Email:63298118@qq.com
Msn:justthisone@hotmail.com
MobilePhone:13761816466
也许我能给您带来不一样的开发体验
[前言]
以下要讲到的一系列技术,都是本人在去年的创业过程中,进行的基础技术研发所取得的成果,创业项目虽然失败了,但是技术却攒了下来,这里头结晶着我多年来的软件开发感悟,领域涉及到三层架构搭建、.NET FrameWork在COM下的简易实现、数据库编程、网络通信、UI设计、串行化、通用报表组件等等,成果不敢独享,特拿出来分享。这是我第一次整理它,历时一天,时间很仓促,恐有疏漏之处,请多指教。论述中,叙述性的文字内容较少,更多的是以图片和代码的方式展现。
读完这些,您将会在以下方面有所收获:
1、关于开发成本的节约:
独有的代码生成体系:配置好脚本后,可自动生成业务逻辑层、数据访问层(包括数据库)及部分界面表示层,约占系统研发的60-70%的代码量,节省60-70%的成本投入,对后期的升级和维护来说,节省的成本,就不好计算了。
2、COM+Html+JavaScript模式,招人不再很难:
独特的COM+Html+JavaScript模式,让您的研发团队,专业程序员比例大大降低,推荐配置是1名VB(6Or .NET)程序员配2-3名网页设计师,即可完成开发。COM部分,由代码生成体系自动生成,界面表示层部分,由Html+JavaScript来完成,即您的界面,每个窗口内置一个WebBrowser控件,界面以网页(Html)的形式展现在用户面前,通过JavaScript来和COM进行交互,完成网络通信、数据访问、界面展现、用户交互等。
3、VB6下使用.NETFrameWork的简易实现:
您将可以在VB6下使用.NETFrameWork在COM下的简易实现,可使用.Net下的常用数据类型,如ArrayList、HashTable、Stringbuilder等,可象.NET那样在VB6下进行代码写作,代码复制至.NET IDE下,大多是可以运行的。
另外,我们的代码生成体系,未来会支持生成.NET代码,也方便您的系统未来向.NET迁移。
坦率地说,现在找VB6程序员,是越来越难了,但是.NET程序员铺天盖地都是,就人才的选择来说,只要熟悉. NETFrameWork的人,都可以为我所用。
4、关于部署:绿色化+0配置
实现纯绿色化,系统由EXE调用若干DLL完成,DLL,可以不注册,程序运行时动态加载,方便系统的升级维护。
界面表示层部分,大多由Html+JavaScript 完成,这些发生变动,也不需要重新编译和发布。
0配置会在该章节中有所描述。
5、串行化。
可提供2种方式的串行化,一种是实现了.NET下的IXmlSerializable接口,所有类实例可串行化至Xml,,类实例也可从Xml进行反串行化。二是类实例可串行化至Bytes字节流,方便互联网传输,也可以从Bytes字节流反串行化成类实例。
这个在VB6下的意义是很重大的,到底有多重大,如果您写过文件的结构化存储和网络通信方面的应用,就深有感触了,具体的使用,就不赘述了。
6、UI。
如果您是从事触摸屏开发的,请一定要留意,不是的,也可稍加留意,将向您诠释一种全新而优雅的界面表达方式。
7、其他。
网络通信、报表等,这是所有管理类软件都会碰到的问题。
[正文]
一、关于代码生成体系
VB6是一门没落的语言,曾经的辉煌已是昨日黄花,新的技术层出不穷,每一门语言新出伊始,都在炫耀自己在面向对象方面的成就,比如继承,比如多态,有了这些特性,如何地实现了代码复用,如何节省了代码,但是如果有一天,您都不需要写代码,大部分的代码都是生成的,继承、多态等等,又能算得了什么呢?我有独特的代码生成体系,配置脚本后,可直接生成业务逻辑层、数据访问层(包括数据库)及部分界面表示层,跟市场上的代码生成器不一样的地方,他们更像是一个工具,作为IDE的一个插件存在,一个个类模块或是存储过程单独生成,而我的代码生成器,除了是个工具外,它生成的是一个解决方案,直接生成的是Dll 工程的文件,大致如下:
图片(请下载原文:http://99ef.com/我的技术概要.doc)
Classes文件夹下存有这个工程里的所有类,其下有 Common、Private、Public、Static四个文件夹,分别存的是通用类、私有类、公共类及静态类,DataBase文件夹存放的是数据库文件、Docs存放的是关于这个Dll的html格式的说明文档,Tasks存放的是一个任务列表文件,即脚本中定义的需要手动完成的代码部分,其他文件夹,就不再特殊说明了。在我的项目中,自动生成的代码,约占总代码量的70%之巨。您想象成本可以节省多少?
以下举的例子是一个学生信息管理的简单例子,管理了每个学生和家长的信息。生成的类库叫DySchoolMgrLib,结构比较简单,仅仅有 Student、Father两个类,其他的类都是辅助类。不废话了,贴图。
图片(请下载原文:http://99ef.com/我的技术概要.doc)
Student类成员列表,熟悉.NET FrameWork 的朋友是不是看到一些似曾相识的东西呢?Clone,GetHashCode,ToString,Equals等等,当然,还有Serialize等,Clone代表这个类实现了ICloneable接口,GetHashCode,ToString,Equals代表了这个类继承自Object, Serialize代表了这个类实现了IXmlSerializable接口。
图片(请下载原文:http://99ef.com/我的技术概要.doc)
Student类的静态成员。比如,我们可以写这样的代码:
Call Student.Delete("001") ‘//删除学号为 001的学生信息。
Option Explicit
Private m_Frm As DyADODB.dyForm '//对当前窗口生成其DyForm
Private m_Std As DySchoolMgrLib.Student '//当前学生信息
Private Sub Form_Load()
Set m_Frm = NewdyForm(Me) '//以本窗口来生成 DyForm
Set m_Std = Student.GetInstance("001", , , , _
dyPropsFtGUID Or dyPropsFtName)
'//关联查询的示例,从学生表中,获得学号为 001的学生实例,同时从父亲表中'//获得其父亲的信息。
'//dyPropsFtGUID Or dyPropsFtName代表同时获取其父亲的 GUID 和 姓名。
Call Student.WriteTo(m_Std, m_Frm, , "S")
'//显示学生信息
'//理解成,将 学生 实例m_Std,写入m_Frm,,按照名称为 "S" 的视图写入
Call Father.WriteTo(m_Std.Father, m_Frm, , "F")
'//显示其父亲信息,解释同上
End Sub
Private Sub cmdOk_Click()
Call Student.ReadFrom(m_Std, m_Frm, , "S")
'//将当前窗口控件中的数据读至 m_Std 实例,按照名称为 "S" 的视图读入
If Student.Update(m_Std) Then
'//向后台更新该Student 实例
MsgBox "Succeed"
Else
MsgBox "Failure"
End If
End Sub
Set m_Std = Student.GetInstanceFor(Student.NewCondition(dyPropsStNo, dyEqual, "001"), , , , , dyPropsFtGUID Or dyPropsFtName)
vCondition 我们用了一个条件(Condition)的对象,当然,这段代码我们还可以这样写:
Dim oCd As DyADODB.Condition
Set oCd = Student.NewCondition(dyPropsStNo, dyEqual, "001")
Set m_Std = Student.GetInstanceFor(oCd, , , , , dyPropsFtGUID Or dyPropsFtName)
Dim oCd As DyADODB.Condition
Set oCd = Student.NewCondition(dyPropsStNo, dyEqual, "001").Append(Student.NewCondition(dyPropsStName, dyEqual, "毛主席"), dyClauseUseForDB, dyAND)
注意到Append了没?或是这么写:
Dim oCds As DyADODB.ConditionClause
Set oCds = NewConditionClause
Call oCds.Append(Student.NewCondition(dyPropsStNo, dyEqual, "001"))
Call oCds.Append(Student.NewCondition(dyPropsStName, dyEqual, "毛主席"))
Set m_Std=Student.GetInstanceFor(oCds,, , , , dyPropsFtGUID Or dyPropsFtName)
这里的oCds相当于这样的 WhereClause : No =’001’ And Name = ‘毛主席’
Dim o As ADOShape
Dim oChild As ADOShape
Set o = NewADOShape("Select GUID,Name From Goods") '//查出商品
Set oChild = o.AppendChild("Select GUID,Name From Factory", "Factory_GUID",
"GUID", "RsFactory")
'//查处商品对应的厂家信息
Call oChild.AppendChild("Select GUID,Name,Address From Boss", "Boss_GUID",
"GUID", "RsBoss")
'//查处厂家对应的老板信息
Debug.Print o.ToClause
'//输出上述的 Shape 语句。
Dim oLs As DyADODB.ListValueSeed
Dim v As Variant
Set oLs = Student.NewListValueSeed(dyPropsStName, dyListValueDistinct Or dyListValueWithoutNull Or dyListValueWithSinglequotes)
‘//初始化列举子,列出 Name 的列表
‘//dyListValueDistinct 代表不重复,
‘//dyListValueWithoutNull代表排除 Null 值
‘//dyListValueWithSinglequotes代表每个值以双引号包含返回。
Call Student.ListValue(oLs)
‘//进行列举
For Each v In oLs.Result
Debug.Print v
Next
‘//输出结果
Dim oStudents As DyADODB.Datas
Dim oStudent As Student
Set oStudents = Student.GetInstances(True, 10, , dyPropsStName Or dyPropsStNo, , _
Student.NewSort(dyPropsStNo, dySortASC))
'//获得学生的集合,按照 No 进行排序,取出前10名
For Each oStudent In oStudents
Debug.Print oStudent.Name
Next
'//输出 学生的姓名
说到这里,我们将.NET下的枚举子概念引入进来,您会发现很方便应用。
Dim en As IEnumerator
Set en = oStudents.GetEnumerator
Do While en.MoveNext
Debug.Print en.Current.Name
Loop
'//输出 学生的姓名
Function Update(ByVal oInstance As Student, [ByVal lProps As dyPropsStudentEnum], [ByVal sViewName As String], [lTableOn]) As Boolean
我们在实际编码时是如下的这番情形:
图片(请下载原文:http://99ef.com/我的技术概要.doc)
相比手写 Update 语句sSQL = "UPDATE Student Set No = '001',Name ='NewName'",我们编程的体验,会更轻松,而且将错误控制住了,因为手写的机会大大减少,更多的是在做选择。
这套体系,让您不用关心数据库是什么,比如到底是Access还是SQLServer,都不需要关心,也不用关心各数据库平台的保留字冲突,我的框架替您搞定,在您的眼里只有类,基础的业务逻辑层及数据访问层由生成器生成,并且提供界面展现的辅助,您只需要考虑业务,只需要考虑如何在界面表示层尽忠地表达自己的想法,满足用户的需求。
这套体系,也让您将来跨越到.NET成为了可能,提供了类似.NET的开发体验。这是一种全新的开发理念,将彻底改变管理类软件的生产方式,也将改变产品品质控制的局面,让软件的生产过程由 纯手工 向 程序半自动化 的方向转变。快来搭上这班车吧,除此之外,您还等什么呢?
[解决办法]
谢谢!
[解决办法]
thanks very much
[解决办法]
jf
[解决办法]
csdn改版了?
[解决办法]
学习一下
[解决办法]
敢问楼主是做了什么 项目,有如此的众多的积累?
[解决办法]
前段时间在做序列化(反序列化)时失败了,用纯VB6编写、TCP/IP协议,难度太大了。
[解决办法]
顶个,辛苦了e
[解决办法]
学习的好地方啊
[解决办法]
UP
[解决办法]
mark
[解决办法]
学习下。
[解决办法]
thanks a lot
[解决办法]
支持
[解决办法]
思路非常不错,支持一下!
[解决办法]
我看过到楼主的另一篇文章,非常佩服楼主.
[解决办法]
就是你找工作的那篇.
[解决办法]
LZ 精神灰常不错!顶起
[解决办法]
好贴,不可不顶!哇塞....牛X的....
[解决办法]
继续学习