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

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

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

目录
相关文章
|
6月前
|
存储 开发框架 前端开发
前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构
发展历史:实验室信息管理系统(LIMS),就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现代的管理思想有机结合,利用数据处理技术、海量数据存储技术、宽带传输网络技术、自动化仪器分析技术,来对实验室的信息管理和质量控制等进行全方位管理的计算机软、硬件系统,以满足实验室管理上的各种目标(计划、控制、执行)。
66 1
|
17天前
|
存储 消息中间件 前端开发
.NET常见的几种项目架构模式,你知道几种?
.NET常见的几种项目架构模式,你知道几种?
|
3月前
|
设计模式 存储 前端开发
揭秘.NET架构设计模式:如何构建坚不可摧的系统?掌握这些,让你的项目无懈可击!
【8月更文挑战第28天】在软件开发中,设计模式是解决常见问题的经典方案,助力构建可维护、可扩展的系统。本文探讨了.NET中三种关键架构设计模式:MVC、依赖注入与仓储模式,并提供了示例代码。MVC通过模型、视图和控制器分离关注点;依赖注入则通过外部管理组件依赖提升复用性和可测性;仓储模式则统一数据访问接口,分离数据逻辑与业务逻辑。掌握这些模式有助于开发者优化系统架构,提升软件质量。
51 5
|
3月前
|
XML 开发框架 .NET
.NET框架:软件开发领域的瑞士军刀,如何让初学者变身代码艺术家——从基础架构到独特优势,一篇不可错过的深度解读。
【8月更文挑战第28天】.NET框架是由微软推出的统一开发平台,支持多种编程语言,简化应用程序的开发与部署。其核心组件包括公共语言运行库(CLR)和类库(FCL)。CLR负责内存管理、线程管理和异常处理等任务,确保代码稳定运行;FCL则提供了丰富的类和接口,涵盖网络、数据访问、安全性等多个领域,提高开发效率。此外,.NET框架还支持跨语言互操作,允许开发者使用C#、VB.NET等语言编写代码并无缝集成。这一框架凭借其强大的功能和广泛的社区支持,已成为软件开发领域的重要工具,适合初学者深入学习以奠定职业生涯基础。
98 1
|
6月前
|
数据安全/隐私保护 Windows
.net三层架构开发步骤
.net三层架构开发步骤
|
开发框架 .NET 容器
.NET Core-依赖注入:良好架构的起点
.NET Core-依赖注入:良好架构的起点
|
开发框架 .NET 容器
.net core依赖注入:良好架构的起点
.NET Core使用依赖注入框架来管理服务的依赖与生命周期。
|
架构师 算法
架构师培养计划-无限思维——变量
架构师培养计划-无限思维——变量
67 0
|
存储 开发框架 前端开发
云LIS检验系统源码,B/S架构Asp.NET CORE版
云LIS系统是基于B/S架构的实验室管理系统,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问。 支持合并两个标本的化验结果,兼容糖耐量合并; 支持图形结果; 支持两癌筛查功能; 支持危机值报警、危机值统计; 支持危急值统计、历史数据对比等条件查询报表设计
154 0
云LIS检验系统源码,B/S架构Asp.NET CORE版
|
计算机视觉
Half-UNet:用于医学图像分割的简化U-Net架构
Half-UNet简化了编码器和解码器,还使用了Ghost模块(GhostNet)。并重新设计的体系结构,把通道数进行统一。
234 0