MVC - 域服务负责过滤还是存储库层?

Har*_*oon 6 c# model-view-controller asp.net-mvc repository domainservices

我应该从域服务过滤我的IQueryable结果吗?

例如......我的3个门户网站(网站)访问相同的域服务层,具体取决于用户的类型,我调用特定的存储库方法并返回结果,

当前存储库层:

    IQueryable<Products> GetAllProductsForCrazyUserNow(CrazyUser id);
    Products GetAProductForCrazyUserNow(CrazyUser id,product id);

    IQueryable<Products> GetProductsForNiceUserNow(NiceUser id);
    Products GetProductsForNiceUserNow(NiceUser id,product id);
Run Code Online (Sandbox Code Playgroud)

在存储库层中执行此操作是否最好:

    IQueryable<Products> GetAllProducts();
    Products GetAProduct(product id);
Run Code Online (Sandbox Code Playgroud)

然后在域服务中,我简单地做过滤器,即

var Niceman = IQueryable<Products> GetAllProducts().Where(u=> u.Name == "Nice");
Run Code Online (Sandbox Code Playgroud)

注意:我有一个只读会话和会话,其中包括存储库层中的CRUD,因此在回答时请记住这一点.

第二个问题:我应该在域服务层进行任何过滤吗?这个层是唯一可以修改实体的层,即Product.Price == 25.00; 这不是委托给存储库层.

amu*_*rra 3

我通常使用存储库层执行简单的 CRUD 工作,并让域层执行任何业务逻辑,或者在您的情况下执行将数据传递回 UI 层之前所需的任何过滤。

将业务/过滤逻辑与存储库层分离将有助于保持事物的整洁。此外,将来如果您转向不同类型的数据访问模式,那么您不必更改该代码的工作方式,因为它将在域层中分离。