DataAccess Layer和class,我在哪里放置我的函数?

时间:2016-04-20 13:58:09

标签: c# dapper data-access-layer

我正在使用Dapper使用数据访问类填充我的类。在本课程中,我将完成所有CRUD操作。

public class Product
{
   public int id { get; set; }
   public string description {get;set;}
   public string value {get;set;}
}

public class ProductDa
{
  //CRUD operations using Dapper
  public List<Product> GetAllElements();
}

现在我需要创建一个返回具有特定值的元素数的函数。

Public int ReturnCountValue(int val)

在此函数中,我将调用GetAllElements,然后使用LINQ返回所需的值。

我想知道的是,我应该在哪里放置ReturnCountValue函数:ProductDa(数据访问层)或Product(基类)?

2 个答案:

答案 0 :(得分:1)

鉴于你使用的模式,我认为你的好心理模型如下:

Product表示数据库中的一行 - 它是一个普通的旧C#对象(PO​​CO),没有什么特别聪明的。它应该只是一个自动属性的集合,就像你在你的例子中一样。

ProductDa应该是您进行数据访问的地方。要弄清楚您是否正在访问数据,您应该问自己&#34;我是否会查询数据库以实现此方法?&#34;或者&#34;我会使用Dapper来实现这种方法吗?&#34;如果答案是肯定的,那么与数据库的交互就会进入该类及其方法。

至于你是否应该使用LINQ的Count()方法或捆绑自己的方法:在数据访问级别,你应该避免为Count()捆绑自己的方法。数据访问层应该是抽象出你如何查询数据库的细节;消费者对您的数据访问层(CountAnyFirst等)的进一步操作是可以的。另外,由于您已经返回List<Product>,因此您可以访问List.Count属性,因此访问呼叫者很容易。

鉴于这一切,我会修改你的ProductDa课程如下

public class ProductDa
{
    //CRUD operations using Dapper
    public List<Product> GetAllElements();
    //query database using Dapper to get all the elements where Value == value
    public List<Product> GetAllElementsWithValue(int value);
}

并按如下方式使用类来获取返回的Product的数量:

var dataAccess = new ProductDa();
var threeValuedItems = dataAccess.GetAllElementsWithValue(3);
int numberOfItems = threeValuedItems.Count;

或者,更简洁地说:

var dataAccess = new ProductDa();
var numberOfItemsWithValueThree = dataAccess.GetAllElementsWithValue(3).Count;

答案 1 :(得分:0)

不要编写任何ReturnCountValue方法,使用LINQ而不是任何方法作为Count。我强烈推荐Repository而不是DAL。 here