<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>
最近比较清闲,正好利用这个时间仔细研究了一下Asp.net的多层架构,主要参考的是 Wrox 的一本<.net website programming problem-design-solution>,个人觉得这本书写的不错。面向有一定.net基础的开发人员,刚开始看起来可能觉得很难懂,但是仔细研究一下会发现,这本书是一本面向工程应用的优秀参考手册。 <br>Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系。我的做法是这样的:首先建立一个DataCore的基类。基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等。在这里面有一个地方值得注意,通过对一个函数的重载可以实现调用不同功能的存储过程。以下代码示例: <br><br>protected int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected ) <br>{ <br>int result; <br><br>Connection.Open(); <br>SqlCommand command = BuildIntCommand( storedProcName, parameters ); <br>rowsAffected = command.ExecuteNonQuery(); <br>result = (int)command.Parameters["ReturnValue"].Value; <br>Connection.Close(); <br>return result; <br>} <br><br>protected SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters ) <br>{ <br>SqlDataReader returnReader; <br><br>Connection.Open(); <br>SqlCommand command = BuildQueryCommand( storedProcName, parameters ); <br>command.CommandType = CommandType.StoredProcedure; <br><br>returnReader = command.ExecuteReader(); <br>//Connection.Close(); <br>return returnReader; <br>} <br><br>protected DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName ) <br>{ <br>DataSet dataSet = new DataSet(); <br>Connection.Open(); <br>SqlDataAdapter sqlDA = new SqlDataAdapter(); <br>sqlDA.SelectCommand = BuildQueryCommand( storedProcName, parameters ); <br>sqlDA.Fill( dataSet, tableName ); <br>Connection.Close(); <br><br>return dataSet; <br>} <br><br>protected void RunProcedure(string storedProcName, IDataParameter[] parameters, DataSet dataSet, string tableName ) <br>{ <br>Connection.Open(); <br>SqlDataAdapter sqlDA = new SqlDataAdapter(); <br>sqlDA.SelectCommand = BuildIntCommand( storedProcName, parameters ); <br>sqlDA.Fill( dataSet, tableName ); <br>Connection.Close(); <br>} <br><br>道理很简单,一看就懂。对于以后的操作有好处的。 <br><br>其次是要建立逻辑层,这个逻辑层基本上就是实例化数据层DataCore之后为表示层返回一些DataSet,DataReader之类或是执行一些insert,update,delete之类语句。这个逻辑层也是为了区分整个Project下面不同功能模块。比如说用户模块起名叫做UserModel.cs,新闻模块叫做NewsModel.cs之类。逻辑层的另一个好处就是可以为表示层建立可以多次实例化的同一个对象或是方法。比如说User类,通过ID或是Username 查询并建立的对象可以被表示层多次调用。 <br><br>最后是表示层,表示层的功能就是完成页面逻辑。主要是接受客户端数据然后经过简单整合和判断,传递给逻辑层处理。同样,接收逻辑层传递来的Dataset或DataReader,表示在前台页面。 <br><br>数据在各个层次之间的关系相对独立,但是又相对连续。 <br><br>独立性: <br><br>对于表示层之外的几个层,都可以把单个的对象或是方法直接拿出来放到其他工程中。因为每个曾都是为了实现模型中独立的功能而完成的。因为在类似工程中的应用基本上不用太大改动,特别是一些相对更加原始的层,在这个示例中的DataCore就是一个典型的例子。 <br><br>连续性: <br><br>数据在传递过程中有较强的连续性。举一个例子,在表示层中有这样一个根据Session中Userid返回一个Dataset,原本我是这样写的: <br><br>表示层: <br><br>DataSet UserInforRow = ObjectUser.GetUserInfor(Int32.Parse(Session["UserId"].ToString())); <br><br>逻辑层: <br><br>public DataSet GetUserInfor(int UserID) <br>{ <br>SqlParameter[] parameters ={new SqlParameter("@UserID",SqlDbType.Int,4)}; <br><br>parameters[0].Value = UserID; <br><br>using(DataSet UserInfor = RunProcedure("GetUserInfor",parameters,"UserInfor")) <br>{ <br>return UserInfor; <br>} <br>} <br><br><br><br>这样可以编译通过,但是在执行的时候提示错误,类型不匹配,语法上面没有错误。但是错误出在,表示层传进来的是一个Int32,在Sqlparameter中确是一个Int,4,本来以为这样的变量类型都是在每一个层次中相对独立的,但是当他们之间传递数据的时候,出现了问题。 <br><br>对于这个问题的解决方案有两种,无非是更改表示层还是更改逻辑层。更改逻辑层,就要改成 <br><br>SqlParameter[] parameters ={new SqlParameter("@UserID",SqlDbType.Int,32)}; <br><br>更改表示层要改为: <br><br>DataSet UserInforRow = ObjectUser.GetUserInfor(int.Parse(Session["UserId"].ToString())); <br><br>两个方案中显然是更改表示层比较合理,因为不能够因为一个变量的传递更改变逻辑层中的可以被其他表示层页面所调用的方法。 <br><br>其他类似的变量传递和引用也遇到类似问题,虽然几个层次相对独立,但是在数据的传递上也相对连续。 <br><br>.net在web上面的应用可以做的很复杂,逻辑也很强,简单的单页面调用不是.net的特点也不能作为工程应用。我也是接触了一点,冰山一角,希望能起到一个抛砖引玉的作用.<br><br><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1603534</p> <br></.net>
分享到:
相关推荐
浅谈Asp.net多层架构中的变量引用与传递
【ASP.NET编程知识】浅谈ASP.NET中多层架构.docx
·介绍项目开发与管理流程、项目组成员分工等公司实际开发与管理方式,了解一般软件公司项目开发与管理情况 ·介绍一下.net分层开发的应用和分层的原理 2.介绍怎样编写实体层。掌握在.net下怎样编写实体层 3.介绍...
很不错ASP.net讲解让你对三层架构有一个具体的了解教程希望对大家的开发有帮助。
一个很好的学习asp.net 分层的学习资料哦
一个学习使用ASP.NET MVC架构进行商业开发的好例子
Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系。我的做法是这样的:首先建立一个DataCore的基类。基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等。
asp.net组织架构控件
asp.net网站架构分析
Asp.Net Core 3.1 MVC+EF Core +SqlSugar ORM框架实例 多层架构示例Demo,与大家共同学习,加QQ532186511交流沟通更多.Net Core技术
深入浅出谈ASP.NET三层架构,适合刚接触ASP.NET三层架构的朋友们
ASP.NET架构分析(二)ASP.NET架构分析(二)ASP.NET架构分析(二)ASP.NET架构分析(二)ASP.NET架构分析(二)ASP.NET架构分析(二)ASP.NET架构分析(二)ASP.NET架构分析(二)ASP.NET架构分析(二)
【ASP.NET编程知识】浅谈ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法.docx
【ASP.NET编程知识】浅谈ASP.NET Core 中jwt授权认证的流程原理.docx
在实战篇中,采用ASP.NET3.5技术,基于多层架构实现了原创的ASP.NET3.5MVC博客网站,便于初学者学习、运用ASP.NET3.5MVC技术。 目录 第3篇 实战篇 第19章 多层架构的博客网站 第20章 博客网站页面总体设计 第22章...
Asp.net及C#全局变量使用方法汇总
全书共分9章,主要讲解ASP.NET基础、Web窗体技术与用户界面设计、数据访问层与业务逻辑层实现技术、数据控件与视图层实现技术、应用其他常用技术完善系统、ASP.NET MVC框架、持久化技术NHibernate、集成框架Spring...
【ASP.NET编程知识】浅谈ASP.NET的include的使用方法.docx
【ASP.NET编程知识】浅谈ASP.NET Core中间件实现分布式 Session.docx
浅谈asp.net中的ExecuteNonQuery(),ExecuteReader()和ExecuteScalar().