`
ihuashao
  • 浏览: 4723151 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多
最近比较清闲,正好利用这个时间仔细研究了一下Asp.net的多层架构,主要参考的是 Wrox 的一本<.Net WebSite Programming Problem-Design-Solution>,个人觉得这本书写的不错。面向有一定.net基础的开发人员,刚开始看起来可能觉得很难懂,但是仔细研究一下会发现,这本书是一本面向工程应用的优秀参考手册。
Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系。我的做法是这样的:首先建立一个DataCore的基类。基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等。在这里面有一个地方值得注意,通过对一个函数的重载可以实现调用不同功能的存储过程。以下代码示例:

protected int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
{
int result;

Connection.Open();
SqlCommand command = BuildIntCommand( storedProcName, parameters );
rowsAffected = command.ExecuteNonQuery();
result = (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()));

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

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

.net在web上面的应用可以做的很复杂,逻辑也很强,简单的单页面调用不是.net的特点也不能作为工程应用。我也是接触了一点,冰山一角,希望能起到一个抛砖引玉的作用.
分享到:
评论

相关推荐

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

    总结来说,Asp.net多层架构中的变量引用与传递涉及了数据层的数据库操作封装、逻辑层的业务逻辑实现以及表示层的用户交互。通过合理的分层设计,可以实现代码的高内聚、低耦合,提高软件的可维护性和可扩展性。

    asp.net 多层架构

    ASP.NET多层架构是一种设计模式,它将应用程序的不同部分,如数据访问、业务逻辑和用户界面,分离到独立的层次中,以实现更好的组织、可维护性和可扩展性。这样的架构通常包括三个主要层次:表现层(Presentation ...

    【ASP.NET编程知识】浅谈ASP.NET中多层架构.docx

    本文将深入探讨ASP.NET中的多层架构,包括二层架构、三层架构以及MVC模式,分析它们各自的特点和适用场景。 首先,二层架构是将应用程序分为两个部分:用户界面层和数据访问层。这种架构简单明了,用户界面直接与...

    ASP.net三成架构

    ASP.NET三成架构是一种常见的软件设计模式,常用于构建可维护性和可扩展性较高的Web应用程序。这个架构将应用程序分为三个主要层次:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层...

    asp.net mvc多层架构源码

    在本“ASP.NET MVC多层架构源码”中,我们可以深入理解如何利用MVC模式(Model-View-Controller)来设计和实现复杂的商业应用。 **MVC模式** MVC模式是一种软件设计模式,它将应用程序分为三个主要部分:模型...

    基于ASP.NET多层架构下的企业级进销存软件全程培训

    ·介绍项目开发与管理流程、项目组成员分工等公司实际开发与管理方式,了解一般软件公司项目开发与管理情况 ·介绍一下.net分层开发的应用和分层的原理 2.介绍怎样编写实体层。掌握在.net下怎样编写实体层 3.介绍...

    浅谈ASP.NET中多层架构

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

    ASP.NET Core 3.1中文教程.pdf

    * 微服务架构:ASP.NET Core 也适用于开发微服务架构,使用 Docker 容器和 Kubernetes 等技术。 四、ASP.NET Core 的核心概念 * Startup 类:ASP.NET Core 的应用程序启动类,负责配置应用程序的各种设置。 * 依赖...

    Asp.Net Core 3.1 MVC+EF Core +SqlSugar ORM框架实例 多层架构示例Demo

    在多层架构中,SqlSugar可以作为数据访问层的一个选择,与业务逻辑层(BLL)和数据访问层(DAL)进行交互。 【多层架构】 多层架构是一种常见的软件设计模式,将应用程序分为多个独立的层,如表示层(UI)、业务...

    ASP.NET网站开发架构指南

    在ASP.NET中,我们还可以利用ADO.NET、Entity Framework等技术进行数据访问,使用ASP.NET MVC或Web Forms模式来构建UI,以及依赖注入、Repository模式等设计模式来提升架构的灵活性和可测试性。 总结来说,ASP.NET...

    ASP.NET框架(多层架构)

    总结,ASP.NET框架在多层架构中的应用为开发者提供了强大而灵活的工具,帮助他们构建高效、安全的Web应用。无论是初学者还是经验丰富的开发者,都能从中受益,实现更高质量的软件开发。通过理解并熟练掌握ASP.NET...

    ASP.NET企业级架构开发技术与案例教程 课件 ppt

    本教程主要涵盖了ASP.NET在企业级应用中的架构设计和技术实现,旨在通过案例教学的方式帮助开发者深入理解和掌握.NET平台下的高级开发技能。ASP.NET是微软推出的一种用于构建动态网站、Web应用程序和Web服务的框架,...

    ASP.NET3.5MVC架构与实战

    在实战篇中,采用ASP.NET3.5技术,基于多层架构实现了原创的ASP.NET3.5MVC博客网站,便于初学者学习、运用ASP.NET3.5MVC技术。 目录 第3篇 实战篇 第19章 多层架构的博客网站 第20章 博客网站页面总体设计 第22章...

    Asp.net及C#全局变量使用方法汇总

    Asp.net及C#全局变量使用方法汇总

    基于ASP.NET三层架构系统

    在这个"基于ASP.NET三层架构系统"中,我们主要探讨的是如何通过使用ASP.NET平台,结合三层架构的设计模式,来实现高效、可维护和可扩展的Web应用。 三层架构,也称为N-Tier架构,是一种将应用逻辑分解为三个独立...

    Asp.NET 简单多层登陆实现代码

    在Asp.NET开发中,构建一个简单而有效的多层架构登录系统是初学者和有经验开发者都需要掌握的基础技能。这个项目旨在教你如何结合Access数据库,实现一个基础的用户登录和新用户注册功能。多层架构设计是软件工程中...

    Asp.net 开发的多层架构宠物商店

    在Asp.net开发的多层架构宠物商店项目中,我们主要关注的是如何构建一个功能完备且具有良好扩展性的在线商店平台。这个项目虽然在页面美化上可能稍显不足,但其核心功能——购物车系统已经得到了很好的实现。下面将...

    基于c#的asp.net三层架构的博客系统

    【标题】:“基于C#的ASP.NET三层架构的博客系统” 在软件开发中,三层架构是一种常见的设计模式,尤其在企业级应用中被广泛应用。它将应用程序分为三个主要部分:表现层(UI)、业务逻辑层(BLL)和数据访问层...

    基于.net多层架构的地区级客户管理系统设计论文与实现本科.doc

    【标题】:“基于.NET多层架构的地区级客户管理系统设计论文与实现本科.doc” 【描述】:“基于.NET多层架构的地区级客户管理系统设计论文与实现本科.doc” 【标签】:“计算机” 这篇论文主要探讨了如何利用.NET...

Global site tag (gtag.js) - Google Analytics