阿立部落格

致力于ASP. NET的研究
posts - 12, comments - 106, trackbacks - 22, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

看了刚才的评论,我觉得有些朋友曲解了我的意思,之前我并没有真正对站点进行分层,而是快速地让刚接触LINQ的人去体验使用LINQ访问数据的快捷
而这章开始才真正说到我的分层方式。
令人激动的时刻终于到了,直到现在,我们仍然在使用表示层操作对象,现在,该是体现三层架构的优势的时候了。这一章中我们将建立一个逻辑访问层
Productbll

之所以叫他“逻辑访问层”,因为我们访问的是逻辑对象而不是实体数据,因为实体数据已经被LINQ预先地转化成了对象。

按部就班地做:

1在前面的基础上打开网站,新建一个类,命名为Productbll.cs。为了使得层次清晰,我新建了两个文件夹用于存放不同层次的东西,结构如下:
 

2打开该类,把Public class中的代码修改至如下:

NorthwindDataContext db = new NorthwindDataContext();
    
public Productbll()
    
{
        
    }

    
//返回Products表中的所有字段
    [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
    
public IQueryable GetProduct()
    
{
        var product 
= from p in db.Products
                      select p;
        
return product;
}

 

3 简单代码解释:

1)   我们在最开头创建一个DataContext实例,以便在后面的方法中直接使用。

2)   接下来是一段声明,告诉自动识别系统该方法是查询方法。

3)   注意我们使用了IQueryable类型,该类型是返回值的类型,可以直接作为Datasource使用。

4)   然后是LINQ语句,意为从db中的Products表(已经对象化)选取所有字段和所有记录。

5)   最后返回product(IQueryable类型)

4新建一个页面,插入一个GridView,选择对象数据源,选择Productbll类,在SELECT方法中选择GetProduct方法。

 

5同样可以直接使用代码来调用方法,在插入GridView后不用选择数据源,在Pageload事件中插入如下代码:

Productbll product = new Productbll();

GridView1.DataSource 
= product.GetProduct();

        GridView1.DataBind();

6运行该页面。

 

它是如何运行的?

如果是使用过ASP.NET2.0建立三层架构网站的朋友,一定会对第四步的操作非常熟悉,在没有LINQ以前,我们把操作数据的方法写在存储过程或者强类型的Dataset中,然后在中间层调用这些方法,最后在表示层中使用对象数据源去展现它们。

在有了LINQ以后,我们省略了Dataset和存储过程,而是直接在中间层中操作被LINQ对象化之后的数据。而操作方法和第一章中所说的是一样的,使用LINQ语句去操作对象,并且返回结果。

之后在表示层中,我们只要使用中间层所提供的方法,而不是重新写方法,就能获取我们所需要的信息。

小结:

在这一章中,我们加入了一个中间层,并且在其中LINQ语法构建了一个查询方法,最后在表示层调用它。这么做的好处很明显,我们不必在表示层中写查询方法,并且如果其他页面也需要使用该查询,就可以直接调用,省去了不必要的重复。

现在,我们的三层架构的层次结构已经出现了:

1在表示层中调用“逻辑访问”方法

2这些方法来自逻辑访问层对于“对象数据”操作后返回的结果

3这些对象来自被LINQ转化的数据

在下一章中,我们会在逻辑访问层中添加一些带参数的查询方法,以及插入、更新和删除的方法,并且在表示层中应用。注意,这些方法都是对对象操作后的结果。

祝,编程愉快!


Tag标签: .NET,分层,LINQ,ASP.NET

Feedback

#1楼 [楼主]   回复  引用  查看    

2008-04-03 12:20 by NafLian      
http://www.cnblogs.com/ch00694534/archive/2008/04/02/1134975.html
这是文章的目录

#2楼    回复  引用  查看    

2008-04-03 13:04 by 恨世生      
其实和之前的没有LINQ的时候的3层结构差不多
但不知道性能如何

#3楼 [楼主]   回复  引用  查看    

2008-04-03 13:07 by NafLian      
性能我确实也不清楚,在结构上,就是把LINQ查询语句加入了逻辑层,这样做是有好处的,在许多查询中可以更加方便的与内容联系起来

#4楼    回复  引用  查看    

2008-04-03 13:57 by 残香恨      
我不久前做的一个小项目也是采用这种结构,不过,我们用工程来分层,但是说实话,我感觉Linq的更新和删除确实不爽,性能我和同事一致认为不太理想!

#5楼 [楼主]   回复  引用  查看    

2008-04-03 17:34 by NafLian      
--引用--------------------------------------------------
残香恨: 我不久前做的一个小项目也是采用这种结构,不过,我们用工程来分层,但是说实话,我感觉Linq的更新和删除确实不爽,性能我和同事一致认为不太理想!
--------------------------------------------------------
一般都认为LINQ性能会低下一些,LINQ还得再编译一次,不过现在还不能妄下定论。至于更新和删除功能,也许是习惯的问题吧,因为即便不使用LINQ,我也会在业务层那么写,其实也就多一个submitchange罢了

#6楼    回复  引用  查看    

2008-04-03 21:15 by 江大鱼      
把 IQueryable 传给 Presentation Layer,是不是增加了P层对LINQ的依赖呢?

#7楼 [楼主]   回复  引用  查看    

2008-04-03 21:59 by NafLian      
仅仅是在展示数据的时候使用,删除、更新、插入操作以及特殊查询(如FOOTER中显示总价)的操作都不会使用IQueryable,其实这只是个类型而已,换成其他类型的数据比如IENURABLE也可以展示出数据来

#8楼    回复  引用    

2008-04-08 16:35 by 没搞男人 [未注册用户]
我做过Hibernate的.net项目,运行效率不高,但相对于使用hibernate带来的开发效率,很值得。
谢谢博主的贴,我正在寻找linq和中间层方面的资料
出售蓝奇高级验证码识别引擎,可准确识别新浪动网淘宝CSDN等多种复杂验证码。

输出为一个标准DLL,可供VB,VC,Delphi,C#.NET,VB.NET,模拟精灵,按键精灵等多平台调用,调用方法简单,几行代码即可完成。独具特色的边缘检测字符分离、旋转倾斜纠正和通用字符匹配算法(无论字体和大小), 使得该引擎对于像新浪、动网、淘宝、CSDN等多种验证码均有不错的识别率,是一款效果较为理想的验证码识别引擎。附详细的调用实例和代码注释等相关技术文档。

官方网站 - http://***/yzm_advocr
识别效果怎么样一试就知道 - DEMO下载 http://***/yzm_advocr/advocr.rar

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-03 12:31 编辑过


相关链接: