[转]如何进行.NET高效开发
一、面向对象的.NET开发
.NET与JAVA一样是一种面向对象的程序语言,面向对象的程序开发具有续承性、封装性、多态性等多种高级特性。这种方式的程序开发的思维方法与我们现实生活中习惯的思维方式是相似的。.NET可以轻松创建对象,并拥有所有面向对向语言所具有的特性。面向对象是.NET可以高效开发的基础,我们现在从几个方面讲述如何高效创建面向对象的.NET程序。
二、.NET程序的层次结构
如何对程序进行合理的分层会对项目的开发效率、程序的维护性等有极大的影响,所以必须重视对程序合理分层。一种较为细致、合理的分层是将程序分为四层,从下到上分为:数据结构层、数据操作层、.NET对象层、表示层。如下图:
数据结构层(SqlServer或Oracle):这一层是整个系统中最为核心的一层,这一层的内容为:数据库表、索引、关系等最低层内容。所有的需求都在这一层能够体现,也是开发人员必须花费大量时间进行设计的一层。我们可以通过PowerDesign或ERStudio等工作先进行数据库模型的设计,将数据库模型设计到最优,然后转化成物理数据库。
数据库操作层(存储过程):数据结构上面的是操作数据库的存储过程,在.NET开发中应有所有对数据库的操作均由存储过程来进行的习惯。存储过程中基本的方法有:Add(添加一条记录)、Delete(删除一条记录)、Update(更新一条记录)、Load(加载一条记录)、List(读取记录列表)。其他可以根据需要篇写相应的存储过程。
.NET对象层:为每个表创建一个对象,在数据库与程序间进行映射,使数据库结构与程序结构一一对应。将表中的字段映射为对象的属性,针对表操作的存储过程映射为方法;
表示层(WindowForm或WebForm):表示层可以是网页也可以是Window程序的界面
三、对象的结构
让我们先看看数据库的结构,以SqlServer为例数据库中粗略分有三项内容:表、视图、存储过程。
数据库最基础的是表,表包括字段,字段包括主键、外键。如一个数据库有两个表:Users(用户表)、Article(文章),Users包括主键UserID、用户姓名Name;Article表包括:文章主键ArticleID、文章标题Title、文章内容Content、外键文章所有人UserID。
当我们读取文章列表时希望能同时读取文章所有人的姓名即Users表中的Name字段,这时我们需要创建一个视图,以方便读取,视图的命名为:View+表名即ViewArticle。视图与表性质一样,只是在Article所有字段外添加了Name字段。
有几种对表数据进行操作的常规方法:添加一条记录(Add)、删除一条记录(Delete)、更新一条记录(Update)、读取一条记录(Load)、读取一个记录集(List)。我们应该养成所有对数据进行操作都在存储过程中进行的习惯,所以数据库中会有五种常规的存储过程。Add、Update、Delete三种方法均直接对表进行操作,Load、List方法如果表有视图则在视图中读取否则也直接在表中读取。除了以上五类存储过程外还会有一些根据业务需要用户自定义的存储过程。
至此我们粗略了解了数据库的结构,那我们如何来创建对象?对象的创建应该以数据库中的表为基础,表中的字段具有对象属性的特性,所以我们将字段映射为对象的属性;数据库中的存储过程具有对象方法的特性所以我们将存储过程映射为对象中的方法。为了使程序结构更加清晰我们将属性与方法分开,为属性建立一个基类如:CuserBase,在这个类中保存所有Users表对应的字段属性,类名定义为:C+表名+Base;方法类命名为Cusers,名称规则为:C+表名,Cusers续承CusersBase类。如果对应的表有视图时怎么办呢?就如Article有视图ViewArticle时,我们为扩展的字段Name建立一个扩展类CArticleExtend,命名规则为:C+表名+Extend,这时续承关系为:Carticle续承CArticleExtend类,CArticleBase续承CArticleExtend类。数据库与程序的对应关系如下图:
.NET对象中的方法与存储过程有一个小的差别,List读取列表的方法在对象中分为两个:GetDataSet——这一方法程序返回DataSet对象、List——这一方法返回对象的集合,所以我们需要再创建一个对象集合类如:CarticleCollection,命名规则为:C+表名+Collection。对象中List方法通过一个循环读取记录集中的数据,你可以在逐条读过程中将记录内容修改为你需要的形式再绑定到控件上,当然你可以不用List方法,那样你就不用创建集合类。
四、Oracle数据库与SqlServer数据库结构的差异
.NET一样支持用户使用Oracle数据库,对.NET程序而言没有太大的区别,但Oracle与SqlServer数据库的结构与SqlServer是有所区别的。Oracle有包的概念,所以可以将过程更加对象化,我们将所有针对一个表操作的存储过程放在同一个包里,以便维护的时候更加清晰。包包括:包头和包体,包头为包的定义,定义过程的名称及输入输出参数,包体是具体的过程,请注册包头与包体的定义部分必须对应否则将会出错。Oracle与SqlServer的另一个差别是Oracle中自动生成的ID需要通过序列产生,不象SqlServer中设定字段为自动增长即可。在结构上主要区别就是有包的概念。
五、高效创建程序
有人会说这样的结构确实很清晰、易于维护,但开发时工作量会过大。现在向大家推荐一个代码生成的免费软件dbNet,他为你轻松生成四层中的两层:数据操作层和.NET对象层。这样可以将大量的时间节省下来,让你在效率和结构化双得。这一工具在http://www.dbo.cn中可以下载,有两个版本:SqlServer版和Oracle版。你可以将你的精力花在需求分析、数据结构设计和表示层的开发上,有很多人想到是否可以为你生成更多的代码,事实上是不可行的,因为机器永远不可能生成一个根据不同人不同需要的软件。六、dbNet软件介绍
这一软件使用非常简单,先通过文件菜单连接数据库,之后软件会将你数据库中的表、视图、存储过程读取左侧的树中展示,如下图:
右上方为生成代码窗口,右下方为属性窗口。有四种不同的代码分别生成:存储过程、基类、操作类、自定义函数。让我们逐个看看如何生成:
存储过程生成:
点击左侧树中要生成存储过程的表,系统会自动读取这一表的字段,如果有视图会选中视图,你也可以更改视图,如下图:
下方为表中的字段,只对ADD方法有效,打勾的字段为ADD方法输入字段,软件会自动筛选输入参数,有默认值的及自动生成的主键会自动不选。生成的方法也会先在数据库中查询是否已存在,如果已存在也不会选择,当然你也可以手动打勾。点击生成按钮更会生成所有选定的存储过程。基类生成:
基类的生成非常简单,没有什么选项,可以根据程序的语言生成VB或C#。操作类生成:
软件会自动设定每个类的名称,还会根据存储过程在数据库中是否存在选择生成的方法,如下图:
如果方法与存储过程不对应你可以重新输入存储过程名称,点击生成操作类按钮即完成代码生成。请注册在生成存储过程并创建后请先刷新数据库,因为数据库已有更新。自定义函数生成:
当我们除五种常规的存储过程外另外创建了存储过程时我们可以通过这里生成.NET代码。这里的操作请先点击要生成程序代码的存储过程,如下图:
软件会查找相对应的表,这里的查找只有在命名规则与系统相同时才能找到,如果不能找到对应的表请手动选择,以及选择对应视图。生成的方法类型请选择一种类型,添加记录、删除记录、更新记录均为无返回值方法,加载一条记录请选Load,读取一个列表请选择List,点击生成按钮完成生成。
.NET与JAVA一样是一种面向对象的程序语言,面向对象的程序开发具有续承性、封装性、多态性等多种高级特性。这种方式的程序开发的思维方法与我们现实生活中习惯的思维方式是相似的。.NET可以轻松创建对象,并拥有所有面向对向语言所具有的特性。面向对象是.NET可以高效开发的基础,我们现在从几个方面讲述如何高效创建面向对象的.NET程序。
二、.NET程序的层次结构
如何对程序进行合理的分层会对项目的开发效率、程序的维护性等有极大的影响,所以必须重视对程序合理分层。一种较为细致、合理的分层是将程序分为四层,从下到上分为:数据结构层、数据操作层、.NET对象层、表示层。如下图:
数据结构层(SqlServer或Oracle):这一层是整个系统中最为核心的一层,这一层的内容为:数据库表、索引、关系等最低层内容。所有的需求都在这一层能够体现,也是开发人员必须花费大量时间进行设计的一层。我们可以通过PowerDesign或ERStudio等工作先进行数据库模型的设计,将数据库模型设计到最优,然后转化成物理数据库。
数据库操作层(存储过程):数据结构上面的是操作数据库的存储过程,在.NET开发中应有所有对数据库的操作均由存储过程来进行的习惯。存储过程中基本的方法有:Add(添加一条记录)、Delete(删除一条记录)、Update(更新一条记录)、Load(加载一条记录)、List(读取记录列表)。其他可以根据需要篇写相应的存储过程。
.NET对象层:为每个表创建一个对象,在数据库与程序间进行映射,使数据库结构与程序结构一一对应。将表中的字段映射为对象的属性,针对表操作的存储过程映射为方法;
表示层(WindowForm或WebForm):表示层可以是网页也可以是Window程序的界面
三、对象的结构
让我们先看看数据库的结构,以SqlServer为例数据库中粗略分有三项内容:表、视图、存储过程。
数据库最基础的是表,表包括字段,字段包括主键、外键。如一个数据库有两个表:Users(用户表)、Article(文章),Users包括主键UserID、用户姓名Name;Article表包括:文章主键ArticleID、文章标题Title、文章内容Content、外键文章所有人UserID。
当我们读取文章列表时希望能同时读取文章所有人的姓名即Users表中的Name字段,这时我们需要创建一个视图,以方便读取,视图的命名为:View+表名即ViewArticle。视图与表性质一样,只是在Article所有字段外添加了Name字段。
有几种对表数据进行操作的常规方法:添加一条记录(Add)、删除一条记录(Delete)、更新一条记录(Update)、读取一条记录(Load)、读取一个记录集(List)。我们应该养成所有对数据进行操作都在存储过程中进行的习惯,所以数据库中会有五种常规的存储过程。Add、Update、Delete三种方法均直接对表进行操作,Load、List方法如果表有视图则在视图中读取否则也直接在表中读取。除了以上五类存储过程外还会有一些根据业务需要用户自定义的存储过程。
至此我们粗略了解了数据库的结构,那我们如何来创建对象?对象的创建应该以数据库中的表为基础,表中的字段具有对象属性的特性,所以我们将字段映射为对象的属性;数据库中的存储过程具有对象方法的特性所以我们将存储过程映射为对象中的方法。为了使程序结构更加清晰我们将属性与方法分开,为属性建立一个基类如:CuserBase,在这个类中保存所有Users表对应的字段属性,类名定义为:C+表名+Base;方法类命名为Cusers,名称规则为:C+表名,Cusers续承CusersBase类。如果对应的表有视图时怎么办呢?就如Article有视图ViewArticle时,我们为扩展的字段Name建立一个扩展类CArticleExtend,命名规则为:C+表名+Extend,这时续承关系为:Carticle续承CArticleExtend类,CArticleBase续承CArticleExtend类。数据库与程序的对应关系如下图:
.NET对象中的方法与存储过程有一个小的差别,List读取列表的方法在对象中分为两个:GetDataSet——这一方法程序返回DataSet对象、List——这一方法返回对象的集合,所以我们需要再创建一个对象集合类如:CarticleCollection,命名规则为:C+表名+Collection。对象中List方法通过一个循环读取记录集中的数据,你可以在逐条读过程中将记录内容修改为你需要的形式再绑定到控件上,当然你可以不用List方法,那样你就不用创建集合类。
四、Oracle数据库与SqlServer数据库结构的差异
.NET一样支持用户使用Oracle数据库,对.NET程序而言没有太大的区别,但Oracle与SqlServer数据库的结构与SqlServer是有所区别的。Oracle有包的概念,所以可以将过程更加对象化,我们将所有针对一个表操作的存储过程放在同一个包里,以便维护的时候更加清晰。包包括:包头和包体,包头为包的定义,定义过程的名称及输入输出参数,包体是具体的过程,请注册包头与包体的定义部分必须对应否则将会出错。Oracle与SqlServer的另一个差别是Oracle中自动生成的ID需要通过序列产生,不象SqlServer中设定字段为自动增长即可。在结构上主要区别就是有包的概念。
五、高效创建程序
有人会说这样的结构确实很清晰、易于维护,但开发时工作量会过大。现在向大家推荐一个代码生成的免费软件dbNet,他为你轻松生成四层中的两层:数据操作层和.NET对象层。这样可以将大量的时间节省下来,让你在效率和结构化双得。这一工具在http://www.dbo.cn中可以下载,有两个版本:SqlServer版和Oracle版。你可以将你的精力花在需求分析、数据结构设计和表示层的开发上,有很多人想到是否可以为你生成更多的代码,事实上是不可行的,因为机器永远不可能生成一个根据不同人不同需要的软件。六、dbNet软件介绍
这一软件使用非常简单,先通过文件菜单连接数据库,之后软件会将你数据库中的表、视图、存储过程读取左侧的树中展示,如下图:
右上方为生成代码窗口,右下方为属性窗口。有四种不同的代码分别生成:存储过程、基类、操作类、自定义函数。让我们逐个看看如何生成:
存储过程生成:
点击左侧树中要生成存储过程的表,系统会自动读取这一表的字段,如果有视图会选中视图,你也可以更改视图,如下图:
下方为表中的字段,只对ADD方法有效,打勾的字段为ADD方法输入字段,软件会自动筛选输入参数,有默认值的及自动生成的主键会自动不选。生成的方法也会先在数据库中查询是否已存在,如果已存在也不会选择,当然你也可以手动打勾。点击生成按钮更会生成所有选定的存储过程。基类生成:
基类的生成非常简单,没有什么选项,可以根据程序的语言生成VB或C#。操作类生成:
软件会自动设定每个类的名称,还会根据存储过程在数据库中是否存在选择生成的方法,如下图:
如果方法与存储过程不对应你可以重新输入存储过程名称,点击生成操作类按钮即完成代码生成。请注册在生成存储过程并创建后请先刷新数据库,因为数据库已有更新。自定义函数生成:
当我们除五种常规的存储过程外另外创建了存储过程时我们可以通过这里生成.NET代码。这里的操作请先点击要生成程序代码的存储过程,如下图:
软件会查找相对应的表,这里的查找只有在命名规则与系统相同时才能找到,如果不能找到对应的表请手动选择,以及选择对应视图。生成的方法类型请选择一种类型,添加记录、删除记录、更新记录均为无返回值方法,加载一条记录请选Load,读取一个列表请选择List,点击生成按钮完成生成。