gpt4 book ai didi

asp.net-mvc-2 - ASP.Net MVC2 中 Controller 和存储库之间的职责范围

转载 作者:行者123 更新时间:2023-12-03 23:10:06 25 4
gpt4 key购买 nike

我试图了解如何使用存储库构建 ASP.Net MVC2 Web 应用程序。

我读过的很多例子、教程和书籍都是这样构建应用程序的:

public interface IProductsRepository
{
IQueryable<Product> Products { get; }
}

public class SqlProductsRepository : IProductsRepository
{
public Table<Product> productsTable;

public IQueryable<Product> Products
{
get { return productsTable }
}
}

public class ProductsController : Controller
{
IProductsRepository productsRepository;
public ProductsController(IProductsRepository productsRepository)
{
// set the Repository
}

public ActionResult GetLatestPublishedProducts(int pageSize, int page, ref int totalItemCount)
{
// Do LINQ query
return View(from p in productsRepository
where p.PublishedOn != null
orderby p.ProductId descending
select to(p))
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList());
}
}

我不明白的一件事是为什么 Linq 查询存在于 Controller 中。

我想知道为什么这样做是不正确的:
public class SqlProductsRepository : IProductsRepository
{
// set data model stuff here

public List<Product> GetLatestPublishedProducts(int pageSize, int page, ref int totalItemCount) {
// DO LINQ Query in here
}
}

public class ProductsController : Controller
{
// set repository stuff here

public ActionResult GetLatestPublishedProducts(int pageSize, int page, ref int totalItemCount)
{
return View(productsRepository.GetLatestPublishedProducts(pageSize, page, totalItemCount));
}
}

最佳答案

你的第二个例子就是你 应该正在做。存储库应处理所有数据访问。

Controller 应该只获取已经过滤/排序的数据并将其传递给 View 。 Controller 不应对任何数据或业务逻辑负责。它应该只负责检索数据并传递它。

在 Controller 中编写代码时,我问自己这个问题;

Will I have to write this code again if I were to write this application in WinForms?



所以你的 IProductsRepository会有方法 GetLatestPublishedProducts ,然后您将在您的 SqlProductsRepository 中实现.

职责是:
  • 存储库 - 获取数据
    数据库
  • Controller - 将数据传递给 View
    用于渲染

  • 然后,您可以更进一步,将任何业务逻辑也分离出来,以便 Controller 本身避免使用存储库。因此,您将拥有位于 Controller 和存储库之间的第三个服务层。

    关于asp.net-mvc-2 - ASP.Net MVC2 中 Controller 和存储库之间的职责范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265055/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com