动软.NET代码生成器生成三层架构
- 格式:doc
- 大小:1.73 MB
- 文档页数:16
【开发】.NET三层架构简单解析这篇⽂章本来应该很早就写出来的,但是⼀直苦于⾃⼰的精神能⼒有限,⽽且已经到了我们学校的考试周,所以时间上还是有点紧迫。
关键的⼀点就是,找不到合理的思路来写,思路没有的话,就算是再好的素材,也写不来⼤家喜欢的⽂章。
之前已经写过关于.NET三层架的两篇⽂章了,⼀篇是和。
如果⼤家有兴趣的话,可以去读⼀读。
当然了,这两篇⽂章的内容,⼤部分都不是⾃⼰的,⾃⼰也是看了别⼈的博⽂,然后⾃⼰总结⼀下,拿过来⾃⼰⽤罢了。
这次的⽂章主要是⾃⼰亲⾃使⽤这些知识做了⼀个项⽬(我们学校资环学院的院⽹站),然后拿出来跟⼤家分享⼀下。
也不要期望博主能够写出多么有⽔平的⽂章,我还是学⽣(⼤三),我也是在学习的过程中,写博客之不过是想记录⾃⼰学习过程中的点滴和记录⾃⼰的进步,如果能够顺便的帮助别⼈学习就更好了。
同时也希望⼤家能够多给我提意见。
⾮常感谢 @ ,@,@ 等博友给我提出的宝贵的修改意见。
也希望⼤家在阅读本博⽂的时候,如果有什么问题,或者疑问及时的给我留⾔沟通,⼤家⼀起探讨。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------对于三层架构来说,主要是使⽤设计模式的思想,对于项⽬的各个模块实现"⾼内聚,低耦合"的思想。
这⾥就不做详细的介绍了,如果⼤家有兴趣,可以阅读软件⼯程和设计模式相关⽂章。
对于三层架构来说,就是使⽤类,把我们在做项⽬的过程中,可能需要反复操作数据库,反复的使⽤某个⽅法等等,可能就是操作的参数不同。
如果我们如果在每次使⽤的时候,都去编写相应的代码,⽆疑会增加程序员的负担。
的三层架构(DAL,BLL,UI)BLL 是业务逻辑层Business Logic LayerDAL 是数据访问层Data Access Layer的三层架构(DAL,BLL,UI)图形表示三层结构. 其中web即为USL层web –> bll –> dal| | || V |+–> model <—+一、三层体系架构1.表示层(USL):主要表示WEB方式,也可以表示成WINFORM方式。
如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
2.业务逻辑层(BLL):主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。
如果说数据层是积木,那逻辑层就是对这些积木的搭建。
3.数据访问层(DAL):主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.二、具体区分1.表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。
2.业务逻辑层:主要负责对数据层的操作,也就是说把一些数据层的操作进行组合。
3.数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作,而不必管其他操作。
三、总结三层结构是一种严格分层方法,即数据访问层(DAL)只能被业务逻辑层(BLL)访问,业务逻辑层只能被表示层(USL)访问,用户通过表示层将请求传送给业务逻辑层,业务逻辑层完成相关业务规则和逻辑,并通过数据访问层访问数据库获得数据,然后按照相反的顺序依次返回将数据显示在表示层。
有的三层结构还加了Factory、Model等其他层,实际都是在这三层基础上的一种扩展和应用.一个简单的三层结构程序一般包括DAL BLL WEB Model几个项目,它们的相互引用关系如下1) WEB引用BLL,Model2)BLL引用DAL,Model3)DAL引用Model4)Model无引用一提三层架构,大家都知道是表现层(UI),业务逻辑层(BLL)和数据访问层(DAL),而且每层如何细分也都有很多的方法。
T4模板⽣成三层架构1、T4 Editor安装T4:根据模板⽣成⽂件,例如model等vs中默认t4模板编码是没有提⽰和⾼亮的,需使⽤以下插件,免费的也可以在vs的“⼯具->扩展和更新”中搜索t4,然后下载注意:安装的时候请先关闭vs,然后再安装2、T4简单使⽤输⼊⼀段t4代码<#@ template debug="false" hostspecific="false" language="C#" #><#@ assembly name="System.Core" #><#@ import namespace="System.Linq" #><#@ import namespace="System.Text" #><#@ import namespace="System.Collections.Generic" #><#@ output extension=".cs" #>using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace t4ceshi{public class User{///<summary>///⽤户ID///</summary>public int UserID { get; set; }///<summary>///⽤户名///</summary>public string UserName { get; set; }///<summary>///密码///</summary>public string Password { get; set; }///<summary>/// Email///</summary>public string Email { get; set; }///<summary>///⼿机号///</summary>public string Mobile { get; set; }}}View Code输⼊完成后保存就会⾃动⽣成⼀个类⽂件3、利⽤T4 根据数据库⽣成三层架构例如T4⽣成Model⽣成model时不⽤⾃⼰写代码,使⽤微软dbfirst模式⽣成model,原理也是t4搞定,⾃动⽣成⼀个Model.edmx,⾥边就有所有表的对应的实体例如T4⽣成DAL所有dal⽣成到⼀个类⽂件中,输⼊下边代码然后保存就会⾃动⽣成1个类⽂件(建议使⽤此⽅法,如需扩展新建类即可)dal.tt代码<#@ template language="C#" debug="false" hostspecific="true"#><#@ include file="EF6.Utility.CS.ttinclude"#><#@ output extension=".cs"#><#const string inputFile = @"../cms.Model/Model.edmx"; var textTransform = DynamicTextTransformation.Create(this); var code = new CodeGenerationTools(this); var ef = new MetadataTools(this); var fileManager = EntityFrameworkTemplateFileManager.Create(this); EdmMetadataLoader loader=new EdmMetadataLoader(textTransform.Host, textTransform.Errors); EdmItemCollection itemCollection = (EdmItemCollection)loader.CreateEdmItemCollection(inputFile); #>using cms.Model;namespace cms.DAL{<#foreach(EntityType entity in itemCollection.GetItems<EntityType>().OrderBy(e => )){#>public partial class <#=#>DAL : BaseDAL<<#=#>>{}<#}#>}<#+public static void ArgumentNotNull<T>(T arg, string name) where T : class{if (arg == null){throw new ArgumentNullException(name);}}#>如果想⼀个表对应⼀个类⽂件,请使⽤下边代码,保存后⾃动⽣成多个类⽂件<#@ template language="C#" debug="false" hostspecific="true"#><#@ include file="EF6.Utility.CS.ttinclude"#><#@ output extension=".cs"#><#const string inputFile = @"../cms.Model/Model.edmx"; var textTransform = DynamicTextTransformation.Create(this); var code = new CodeGenerationTools(this); var ef = new MetadataTools(this); var fileManager = EntityFrameworkTemplateFileManager.Create(this); EdmMetadataLoader loader=new EdmMetadataLoader(textTransform.Host, textTransform.Errors); EdmItemCollection itemCollection = (EdmItemCollection)loader.CreateEdmItemCollection(inputFile); #><#foreach(EntityType entity in itemCollection.GetItems<EntityType>().OrderBy(e => )){fileManager.StartNewFile( + "DAL.cs");#><#//代码⽚段开始#>using cms.Model;namespace cms.DAL{public partial class <#=#>DAL : BaseDAL<<#=#> >{//扩展⽅法添加在这⾥//public IEnumerable<<#=#> > AddRange(IEnumerable<<#=#> > entities) //{// dbContext.Set<<#=#> >().AddRange(entities);// dbContext.SaveChanges();// return entities;//}}}<#//代码⽚段结束#><#fileManager.EndBlock();}#><#fileManager.Process();#><#+public static void ArgumentNotNull<T>(T arg, string name) where T : class{if (arg == null){throw new ArgumentNullException(name);}}#>例如T4⽣成BLL代码同上,把dal修改为bll即可。
动软.ne代码生成器搭建三层架构(转)手把手教你怎么用从暑假里面开始接触学习.NET,由于实际需求,必须一开始就从三层架构开始。
于是进入了痛苦的.NET 三层架构学习。
可能我们学校学生很少有在毕业前在学校用三层架构做东西的,所以我准备给大家来个简单的三层架构实践部署入门。
我就从我自己开发的“波Blog” 作为实例开发环境及其使用工具:动软.net代码生成器2.17版本VsualStudio 2008SQL Server2000 数据库ER studio 数据库建模工具好我们开始:从最基本的,首先在ERstudio 里面把我的系统的数据库设计好,先设计好逻辑模型(Logical Model)完成数据库逻辑模型后,我们用ERstudio 生成实体模型(Physic Model)最后链接生SQL Server成我们的数据库Bo_Blog,由于重点在后面,我就不一一演示ER Studio 怎么使用了打开动软.NET代码生成器,在右上选择添加SQL Server 2000 服务器选择数据库类型,我们这里是SQL 2000填写数据库据连接信息链接成功数据库后,我们会看见右边栏变成了和我们SQL Server 企业管理器一样的数据库表列表我们选择我们项目用的Bo_Blog 数据库,选择中间的选项的生成代码项目然后选择简单三层架构,填写好极为据我方案名称,这里我写的是MyBlog,选择保存路径,这里我保存在桌面然后选择数据库 Bo_Blog 然后会在左边列出数据库的所有表我们把所有表添加到右边框里面来在这里我们要设置一下,我们在解决方案中各个项目里面的命名空间,这里我把所有的命名空间都设置为MyBlog ,其他选择默认,点击开始生成这样会自动生成整个三层架构的解决方案但是这样生成的整个解决方案是不能通过VS 2008 编译通过的,会报很多错误,我们得经行精简和修改接下来按照我说的做打开生成的解决方案,删除里面的所有以 .sln .csproj 和er 结尾的文件和properties里面的AssemblyInfo.cs文件,删除整个Web文件夹,只保留Lib 文件夹里面的mon.dll 文件,DBUtility 文件夹里面的DbHelperSQL.cs文件,我们另外在原文件夹中新建解决方案,然后自己把Model BLL DAL DBUtility Lib 类库项目按照下面方法附加到我们新建的解决方案中添加方式见下面步骤,我们新建解决方案Bo_Blog 在桌面上注意在VS 创建项目的时候,选择.NET FrameWork 2.0 的这里我们,路径选择在桌面一个 Web应用程序项目然后我们分别把原来我们生成和整理后的BLL DAL Model Lib DBUtility 下的文件对应的拷贝到我们新建解决方案的相对应的文件夹下面拷贝完成后,我们在现在的解决方案中,选中一个项目,然后选中解决方案属性上面的显示所有文件按钮,这样就会在下面出现我们赋值过来的文件,用虚线表示的,然后我们按住Ctrl全部选中他们,鼠标右键选择“包括到项目中”,就这样,我们就吧他们附加到这个类库项目中了就这样,我们把其他文件都附加到DAL,Lib,Model,DBUtility 项目中去。
自动生成C#代码功能介绍一键自动生成各种C#代码,可以节省大量的时间来做业务逻辑的代码,那些重复的代码就交给它去做吧,1分钟生成一个架构所有的基本代码。
有了它开发项目的效率简直轻松多了。
∙可以生成3种不同架构的代码:简单三层结构;基于工厂模式三层架构;自定义结构模版∙可以生成页面Html代码和页面.cs处理代码∙支持父子表的(事务)的代码生成∙可以自定义选择生成的字段∙可以自由设定命名空间和实体类名∙自动生成方法属性注释∙支持对表和视图的代码生成∙支持对多种类型数据库生成代码:如SQLServer2000/2005,Oracle,OleDb等∙可以生成3种不同类型数据层: 基于SQL字符串方式,基于Parameter方式和基于存储过程方式的数据层数据库服务器管理类似SQLServer2005的管理界面,方便平常在代码编辑的时候想查看数据库的信息,并且可以很直观的查看字段类型,长度,主键,默认值等详细信息,省去了在代码和数据库管理器之间的来回切换,方便快捷。
∙可支持SQL Server2000/2005、Oracle、OleDb三种类型的数据库同时管理。
∙可以轻松浏览库,表,视图,存储过程的结构信息.∙可以查看存储过程和视图的定义脚本。
∙表的重命名,删除操作。
查询分析器实现类似SQLServer2005的查询分析器的功能,方便编写代码时想进行数查询。
∙实现执行选中部分SQL语句。
∙实现关键字高亮。
∙支持F5快捷键执行语句。
∙实现打开现有脚本,保存当前脚本功能。
∙实现错误检测提示功能。
自动生成存储过程和SQL脚本∙可以自动生成表的创建脚本。
∙可以自动生成表数据的插入脚本。
∙可以自动生成增、删、改、查等操作的存储过程脚本。
∙可以根据选定的数据库和表,进行多选批量生成。
∙支持在当前生成和导出脚本文件功能。
自动生成数据库文档可以根据选定的数据库和表(可批量生成),可以生成字段的详细信息,包括默认值,描述等信息.生成相应的表结构文档,免去手工写文档和操作的麻烦。
.net网页开发中的三层架构1.用VS新建一个网站2.在上面创建的项目的解决方案上右键“添加”-“新建项目”-“类库”。
创建两个类库Bll(业务逻辑层)和Dal(数据访问层)。
3.自此,以上两层和第一步中建立的网页(表示层)组成了一个网站的三层架构。
4.首先编写Dal数据访问层的代码,其中用到了数据库的连接,在建立SqlConnection对象的时候,需要用到连接字符串,为了得到连接字符串,我们可以采用如下步骤:(1)在网站页面中拖入一个SqlDataSource控件(2)配置它的数据源->新建连接(3)配置连接(4)此时按确定后返回即可看到连接字符串代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient; //导入这个命名空间,用于连接数据库namespace Dal{public class UserInfo{///<summary>///数据访问层中添加用户信息///</summary>///<param name="UserLogin">用户登陆名</param>///<param name="UserPsw">用户登陆密码</param>///<param name="UserName">用户姓名</param>///<param name="UserRemark">用户备注</param>///<returns>数据库中受影响的行数</returns>public static int AddUserDal(string UserLogin, string UserPsw,string UserName, string UserRemark){//与数据库建立一个连接SqlConnection conn = new SqlConnection("Data Source=10.70.9.171;Initial Catalog=test;User ID=sa");//打开数据库conn.Open();//利用一个现有连接创建一个Command,用以执行sql指令SqlCommand cmd = conn.CreateCommand();//给Cmmand写入sql语句mandText = "insert into UserInfo values('" +UserLogin.ToString() + "','" + UserName.ToString() + "','" +UserPsw.ToString() + "','" + UserRemark.ToString() + "')";//执行sql指令并返回受影响的行数return cmd.ExecuteNonQuery();}}}5.编写Bll,既业务逻辑层的代码。
三层结构的三层是指表示层、业务逻辑层、数据访问层。
表示层:位于最外层,离用户最近,用于显示数据和接受用户输入的数据,为用户提供一种交互式操作界面。
表示层一般为Windows应用程序或Web应用程序。
业务逻辑层:是表示层和数据访问层之间通信的桥梁,主要负责数据的传递和处理,例如数据有效性的检验、业务逻辑描述相关功能。
业务逻辑层通常为类库。
数据访问层:主要实现对数据的保存和读取操作。
数据访问,可以访问关系数据库、文本文件或是XML文档。
数据访问层通常为类库。
在三层结构中,各层之间相互依赖:表示层依赖于业务逻辑层,业务逻辑层依赖于数据访问层。
在三层结构中,各层之间的数据传递方向分为请求与响应两个方向:表示层接受用户的请求,根据用户的请求去通知业务逻辑层,业务逻辑层收到请求,首先对请求进行阅读审核,然后将请求通知数据访问层或直接返回给表示层,数据访问层收到请求后便开始访问数据库;数据访问层通过对数据库的访问得到请求结果,并把请求结果通知业务逻辑层,业务逻辑层收到请求结果,首先对请求结果进行阅读审核,然后将请求结果通知表示层,表示层收到请求结果,并把结果展示给用户。
使用实体类构建三层结构实体类,简单地说是描述一个业务实体的类,业务实体直观一点理解就是整个应用系统业务所涉及的对象,从数据存储来讲,业务实体救是存储应用系统信息的数据表,我们将每一个数据表中的字段定义成属性,并将这些属性用一个类封装,这个类就是实体类。
业务实体可以认为属于业务逻辑层,当然,可以将业务实体单独作为一层,称为业务实体层。
表示层、业务逻辑层、数据访问层都依赖于业务实体。
各层之间数据的传递主要是实体对象(业务信息封装在实体对象中)。
博客系统数据库:创建数据库MyBlog、用户表Users、日志信息表Articles、评论信息表Comments创建空白解决方案Blog.sln添加类库BlogModels(模型层),分别添加User.cs、Article.cs、Comment.cs(与数据库中的表一一对应)1:6:using System;7:using System.Collections.Generic;8:using System.Text;9:10:namespace BlogModels11:{12://实体类前面一般加上序列化属性,它会对实体类中的所有字段、属性进行序列化处理。
“志远”项目开发培训教材——三层架构及代码生成工具介绍电子信息产业园二〇一〇年一月文档修订(记录批准之后的变更情况)目录1软件架构 (4)1.1三层架构简介 (4)1.2分层式结构的优势和缺点 (5)1.3应用程序框架 (6)1.4三层架构的实践应用 (8)1.5三层架构案例项目:Petshop (11)2MVC设计模式 (13)2.1 MVC设计思想 (13)2.2什么是MVC(Model View Presenter)模式 (14)2.3 MVC的优点 (17)2.4 MVC的缺点 (18)3构架、框架、设计模式之间的关系简述 (19)3.1软件体系结构和框架的定义 (19)3.2框架与架构之间的关系 (19)3.3框架与设计模式之间的关系 (19)4动软功能介绍 (21)4.1动软简介 (21)4.2动软功能:生成基于三层架构的软件代码 (21)4.3动软功能:辅助功能 (29)5基于工厂模式的三层架构的软件代码 (40)5.1相关目标 (40)5.2项目准备 (40)5.3相关操作 (41)5.4案例说明:插入数据(insert) (54)5.5案例说明:修改数据(update) (64)5.6案例说明:编辑数据(select) (68)5.7案例说明:编辑数据(delet) (70)1 软件架构1.1 三层架构简介三层架构是基于模块化程序设计的思想,为实现分解应用程序的需求,而逐渐形成的一种标准模式的模块划分方法。
此模型将应用程序划分为三个层次,如下图所示:1.表示层(用户界面层):表示层:是系统的UI部分,负责使用者与整个系统的交互,即负责处理用户的输入和向用户输出。
在这一层中,理想的状态是不应包括系统的业务逻辑,有时候出于对效率的考虑,这一层可能会在向上传输用户输入之前进行合法性验证。
表示层中的逻辑代码,仅与界面元素有关。
通常采用前端工具(如VB、VC 和Java)开发。
在PetShop中,是利用来设计的,因此包含了许多Web控件和相关逻辑。
打开动软.NET代码生成器,在右上选择添加SQL Server 2000 服务器
选择数据库类型,我们这里是SQL 2000
填写数据库据连接信息
链接成功数据库后,我们会看见右边栏变成了和我们SQL Server 企业管理器一样的数据库表列表
我们选择我们项目用的Bo_Blog 数据库,选择中间的选项的生成代码项目
然后选择简单三层架构,填写好极为据我方案名称,这里我写的是MyBlog,选择保存路径,这里我保存在桌面
然后选择数据库Bo_Blog 然后会在左边列出数据库的所有表
我们把所有表添加到右边框里面来
在这里我们要设置一下,我们在解决方案中各个项目里面的命名空间,这里我把所有的命名空间都设置为MyBlog ,其他选择默认,点击开始生成
这样会自动生成整个三层架构的解决方案
但是这样生成的整个解决方案是不能通过VS 2008 编译通过的,会报很多错误,我们得经行精简和修改
接下来按照我说的做
打开生成的解决方案,删除里面的所有以.sln .csproj 和er 结尾的文件和properties里面的AssemblyInfo.cs文件,删除整个Web文件夹,只保留Lib 文件夹里面的mon.dll 文件,DBUtility文件夹里面的DbHelperSQL.cs文件,我们另外在原文件夹中新建解决方案,然后自己把Model BLL DAL DBUtility Lib 类库项目按照下面方法附加到我们新建的解决方案中
添加方式见下面步骤
我们新建解决方案Bo_Blog 在桌面上
注意在VS 创建项目的时候,选择.NET FrameWork 2.0 的这里我们,路径选择在桌面
创建新的解决方案后,我们在解决方案中新建BLL , DAL , DBUtility ,Lib,Model 五个类库项目,建立一个 Web应用程序项目
然后我们分别把原来我们生成和整理后的BLL DAL Model Lib DBUtility 下的文件对应的拷贝到我们新建解决方案的相对应的文件夹下面
拷贝完成后,我们在现在的解决方案中,选中一个项目,然后选中解决方案属性上面的显示所有文件按钮,这样就会在下面出现我们赋值过来
的文件,用虚线表示的,然后我们按住Ctrl全部选中他们,
鼠标右键选择“包括到项目中” ,就这样,我们
就吧他们附加到这个类库项目中了
就这样,我们把其他文件都附加到DAL,Lib,Model,DBUtility 项目中去。
接下来我们得将解决方案中的几个项目关联起来,分别添加好各自间的引用
我们选择引用项目,在BLL中,我们要引用DAL和Model两个项目
Ctrl+鼠标左键选中DAL和Model,点击确定。
然后我们还要在BLL中引用一个Lib项目中的DLL文件,同样的方式,添加引用->浏览->找到Lib项目,选择里面的mon.dll 文件,点击确定
同样的方法,我们将在DAL项目中引用DBUtility ,Model两个项目
然后我们要补充的就是,在DBUtility 项目中添加引用System.configuration 这个系统类,方式是添加引用->.NET->找到System.configuration,然确定
然后我们在WEB 项目中打开配置文件Web.config 文件,在<configuration> 后面添加
复制内容到剪贴板
代码:
<appSettings>
<add key="WebDAL" value="MyBlog.SQLServerDAL"/>
<add key="WebConnectionString" value="server=localhost;Initial Catalog=Bo_Blog;uid=sa;pwd=***"/>
</appSettings>
这样一段数据库链接配置
然后找到DBUtility 项目下的DbHelperSQL.cs 文件,用
复制内容到剪贴板
代码:
ConfigurationManager.AppSettings["WebConnectionString"];
字符串代替
复制内容到剪贴板
代码:
PubConstant.ConnectionString
当然,你也可以不在Web.Config 文件里面写连接字符串,直接写在这里就是了。