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

简介:   Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系。我的做法是这样的:首先建立一个DataCore的基类。基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等。

  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()));

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

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

目录
相关文章
|
30天前
|
数据安全/隐私保护 Windows
.net三层架构开发步骤
.net三层架构开发步骤
9 0
|
7月前
|
开发框架 .NET 容器
.NET Core-依赖注入:良好架构的起点
.NET Core-依赖注入:良好架构的起点
|
7月前
|
开发框架 .NET 容器
.net core依赖注入:良好架构的起点
.NET Core使用依赖注入框架来管理服务的依赖与生命周期。
|
9月前
|
架构师 算法
架构师培养计划-无限思维——变量
架构师培养计划-无限思维——变量
47 0
|
11月前
|
分布式计算 NoSQL Java
1..Net平台历程介绍和.net framework和netcore的架构体系对比,以及框架的选择介绍
1..Net平台历程介绍和.net framework和netcore的架构体系对比,以及框架的选择介绍
174 0
|
12月前
|
缓存 前端开发 JavaScript
采用.Net Core技术框架开发的医院云LIS平台源码,B/S架构
基于B/S架构的医学实验室检验系统源码,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式,部署一套可支持多家医院检验科共同使用。 采用.Net Core新的技术框架、DEV报表、前端js封装、分布式文件存储、分布式缓存等,支持LIS独立部署,Docker部署等多种方式。
|
存储 开发框架 前端开发
云LIS检验系统源码,B/S架构Asp.NET CORE版
云LIS系统是基于B/S架构的实验室管理系统,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问。 支持合并两个标本的化验结果,兼容糖耐量合并; 支持图形结果; 支持两癌筛查功能; 支持危机值报警、危机值统计; 支持危急值统计、历史数据对比等条件查询报表设计
云LIS检验系统源码,B/S架构Asp.NET CORE版
|
计算机视觉
Half-UNet:用于医学图像分割的简化U-Net架构
Half-UNet简化了编码器和解码器,还使用了Ghost模块(GhostNet)。并重新设计的体系结构,把通道数进行统一。
185 0
|
Linux 数据库 网络架构
推荐一个.Net Core轻量级插件架构
一个基于.Net Core的轻量级插件框架,集成非常简单,两行代码完成集成;支持新增Controller,动态路由;热插拔、易扩展、无需数据库。
257 0
推荐一个.Net Core轻量级插件架构
|
开发框架 JavaScript .NET
一个基于.Net Core遵循Clean Architecture原则开源架构
基于Asp.net Core 6开发的,遵循Clean Architecture原则,可以高效、快速地构建基于 Razor Pages 的 Web 应用程序。
115 0
一个基于.Net Core遵循Clean Architecture原则开源架构

热门文章

最新文章