LINQ下使用三层架构的探索(四)建立一个逻辑访问层,并且添加一些查询方法

看了刚才的评论,我觉得有些朋友曲解了我的意思,之前我并没有真正对站点进行分层,而是快速地让刚接触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转化的数据

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

祝,编程愉快!


posted @ 2008-04-03 12:08  NafLian  阅读(6187)  评论(10编辑  收藏  举报