Asp.net多层架构中的变量引用与传递

  Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系。我的做法是这样的:首先建立一个DataCore的基类。基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等。在这里面有一个地方值得注意,通过对一个函数的重载可以实现调用不同功能的存储过程。以下代码示例:

  

      protected int RunProcedure(string storedProcName, IDataParameter[] parameters, out introwsAffected )

  {int result;Connection.Open();

  SqlCommand command = BuildIntCommand( storedProcName, parameters );

  rowsAffected = command.ExecuteNonQuery();r

  esult = (int)command.Parameters["ReturnValue"].Value;Connection.Close();

  return result;

  }

  protected SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )

  {

  SqlDataReader returnReader;

  Connection.Open();

  SqlCommand command = BuildQueryCommand( storedProcName, parameters );

  command.CommandType = CommandType.StoredProcedure;

  returnReader = command.ExecuteReader();

  //Connection.Close();

  return returnReader;

  }

  protected DataSet RunProcedure(string storedProcName, IDataParameter[] parameters,string tableName )

  {

  DataSet dataSet = new DataSet();

  Connection.Open();

  SqlDataAdapter sqlDA = new SqlDataAdapter();

  sqlDA.SelectCommand = BuildQueryCommand( storedProcName, parameters );

  sqlDA.Fill( dataSet, tableName );

  Connection.Close();return dataSet;

  }

  protected void RunProcedure(string storedProcName, IDataParameter[] parameters,DataSet dataSet, string tableName )

  {

  Connection.Open();

  SqlDataAdapter sqlDA = new SqlDataAdapter();

  sqlDA.SelectCommand = BuildIntCommand( storedProcName, parameters );

  sqlDA.Fill( dataSet, tableName );

  Connection.Close();

  }

  道理很简单,一看就懂。对于以后的操作有好处的。

  其次是要建立逻辑层,这个逻辑层基本上就是实例化数据层DataCore之后为表示层返回一些DataSet,DataReader之类或是执行一些insert,update,delete之类语句。这个逻辑层也是为了区分整个Project下面不同功能模块。比如说用户模块起名叫做UserModel.cs,新闻模块叫做NewsModel.cs之类。逻辑层的另一个好处就是可以为表示层建立可以多次实例化的同一个对象或是方法。比如说User类,通过ID或是Username 查询并建立的对象可以被表示层多次调用。

  最后是表示层,表示层的功能就是完成页面逻辑。主要是接受客户端数据然后经过简单整合和判断,传递给逻辑层处理。同样,接收逻辑层传递来的Dataset或DataReader,表示在前台页面。

  数据在各个层次之间的关系相对独立,但是又相对连续。

  独立性:

  对于表示层之外的几个层,都可以把单个的对象或是方法直接拿出来放到其他工程中。因为每个曾都是为了实现模型中独立的功能而完成的。因为在类似工程中的应用基本上不用太大改动,特别是一些相对更加原始的层,在这个示例中的DataCore就是一个典型的例子。

  连续性:

  数据在传递过程中有较强的连续性。举一个例子,在表示层中有这样一个根据Session中Userid返回一个Dataset,原本我是这样写的:

  表示层:

  DataSet UserInforRow = ObjectUser.GetUserInfor(Int32.Parse(Session["UserId"].ToString()));

  逻辑层:

  

      public DataSet GetUserInfor(int UserID)

  {SqlParameter[] parameters ={new SqlParameter("@UserID",SqlDbType.Int,4)

  };

  parameters[0].Value = UserID;

  using(DataSet UserInfor = RunProcedure("GetUserInfor",parameters,"UserInfor")){return UserInfor;

  }

  }

  这样可以编译通过,但是在执行的时候提示错误,类型不匹配,语法上面没有错误。但是错误出在,表示层传进来的是一个Int32,在Sqlparameter中确是一个Int,4,本来以为这样的变量类型都是在每一个层次中相对独立的,但是当他们之间传递数据的时候,出现了问题。

  对于这个问题的解决方案有两种,无非是更改表示层还是更改逻辑层。更改逻辑层,就要改成

  SqlParameter[] parameters ={new SqlParameter("@UserID",SqlDbType.Int,32)};

  更改表示层要改为:

  DataSet UserInforRow = ObjectUser.GetUserInfor(int.Parse(Session["UserId"].ToString()));

  两个方案中显然是更改表示层比较合理,因为不能够因为一个变量的传递更改变逻辑层中的可以被其他表示层页面所调用的方法。

  其他类似的变量传递和引用也遇到类似问题,虽然几个层次相对独立,但是在数据的传递上也相对连续。

时间: 2024-09-20 14:54:27

Asp.net多层架构中的变量引用与传递的相关文章

浅谈Asp.net多层架构中的变量引用与传递

asp.net|变量|架构 到公司已经快两个星期了,但是由于客户的需求分析没有下来,所有项目迟迟没有开始.正好利用这个时间仔细研究了一下Asp.net的多层架构,主要参考的是 Wrox 的一本<.Net WebSite Programming Problem-Design-Solution>,个人觉得这本书写的不错.面向有一定.net基础的开发人员,刚开始看起来可能觉得很难懂,但是仔细研究一下会发现,这本书是一本面向工程应用的优秀参考手册. Asp.net的多层架构主要是为了解决数据层,逻辑层

基于LINQ TO SQL的多层架构中,如何将实体附加至不同的DataContext

注意: 1.本文中所提到的"实体"均为由LINQ TO SQL生成的(即.dbml) 2.你需要了解LINQ TO SQL对表关联的实现方式,EntitySet 和 EntityRef 也许你看到标题后,会觉得问题比较抽象,那么我举个实例来具体说明一下问题. 在基于LINQ TO SQL的N层架构中,假如我们需要对一个实体进行更新,那么流程应是这样: 流程 BLL.GetModel(p=>p.id==1) --> 修改相应属性(字段)值 --> BLL.Update(

php中的变量引用传值学习笔记

所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy:系统将为目标对象重新开辟一个完全相同的内存空间. 所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间.此时,如果对目标对象进行修改,内存中的数据也会改变. 传值的话,如果是非对象,会传一个值的拷贝,对这个变量做任何改动都不影响原值.传引用或者传对象,是传真实的内存地址,对这个变量做的改动会影响原值.  代码如下 复制代码   function func1($a) { $a = $a

有人在吗,问一下asp.net三层架构中不清楚的问题

问题描述 1,画面上的一些控件,对应不同表的数据,是应该用不同表对应的实体来填充,还是针对画面上的控件,在单独整一个实体出来2,商业逻辑层,如果是针对多表的复杂操作,应该放在哪里3,bll层查询返回多行时,用datatable就可以,有必要用对象的集合吗,感觉多此一举 解决方案 解决方案二:以下只是本人的想法:1,对于像列表这种实体绑定,如果字段太多可以根据显示的要求,整一个只读的实体出来.2,可以用存储过程中进行.3,面向对象用实体类集合有更好的封装.还有就是datatable不是强类型的.解

在js中使用&amp;quot;with&amp;quot;语句中跨frame的变量引用问题_javascript技巧

在脚本编程时使用with语句,可以大大的缩减使用多级对象引用代码行的长度,这是JScript提供给我们的一个Syntax Sugar.当然不使用with,使用临时变量也可以达到同样的效果.不过创建变量时起名确实不是一件很遐意的事,就连MASM高版本中也提供了一个@@(以及@F和@B)来处理临时标号的问题,看来大家都是比较懒得啦.       我也挺喜欢用with语句的,确实可以省不少的事情,而且可以让代码变得也清晰些,特别是在处理跨frame的变量引用时,更加显得方便.这不今天就因为贪图方便又撞

浅谈ASP.NET中多层架构

  Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系.我的做法是这样的:首先建立一个DataCore的基类.基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等. 很多人对开发多层应用程序感到一定的困难.来看一个例子:对于一个只有一两个人的小公司,一个人可能同时担当老板.出纳.会计.市场.销售.开发等多项工作.而对于一个大公司,就会进行比较严密的分工,每个人只完成一部分工作,需要彼此配合才能保证正常运转.以前的开发程序就类似于一个小公司,从用户界面

ASP.NET 中aspx文件的TextBox在aspx.cs文件中无法被引用,提示未将对象引用设置到对象的实例。

问题描述 ASP.NET中aspx文件的TextBox在aspx.cs文件中无法被引用,提示未将对象引用设置到对象的实例.vs2012 解决方案 解决方案二:既然可以执行,说明变量有定义.你自己定义了变量?解决方案三:在vs工具上,你的代码,点击鼠标右键,你可以看到许多调试开发工具功能,例如各种"重构",还有"查看定义"."查找所有引用"等等.要想找到一个变量的定义是不是有歧义,你得直接借助这些工具找到其定义的地方.如果不会使用vs开发工具,那么

实例详细讲解ASP教程之ASP中使用变量的方法

变量|教程 变量用于存储信息. 假如在子程序之外声明变量,那么这个变量可被ASP文件中的任何脚本改变.假如在子程序中声明变量,那么当子程序每次执行时,它才会被创建和撤销 实例: 声明变量 变量用于存储信息.本例演示如何声明变量,为变量赋值,并在程序中使用这个变量 <html><body><%dim namename="Donald Duck"response.write("My name is: " & name)%>&l

asp.net微信公众平台开发(二) 多层架构框架搭建和入口实现

上篇已经设计出比较完善的数据库了,这篇开始进入代码.  首先把上篇设计的数据库脚本在数据库中执行下,生成数据库,然后在VS中建立项目,为了方便理解和查看,我设计的都是很直白的类名和文件名,没有命名空间前缀. 采用接口方式,共8个项目:7个类库和一个MVC项目,  分别为: 显示层--MVC项目 业务逻辑层--访问接口IBLL.具体实现BLL 数据访问层--访问接口IDAL.具体实现DAL 数据(模型)--DataModel 通用方法--Common 仓储--Factory 这里的仓储并不为了生产