gpt4 book ai didi

c# - 在同一个 Controller ActionResult 中运行我的存储库中的 2 个方法是否正确?

转载 作者:太空宇宙 更新时间:2023-11-03 16:50:59 24 4
gpt4 key购买 nike

我正在使用 ASP.NET 4.0 MVC 和 C# 创建一个商店,我对它还很陌生。

我已经开始创建显示特定类别产品的 View 页面。

在特定类别页面上,我想要产品列表,还想要类别名称及其从数据库中获取的相关描述。

目前我这样做的方式是在我的存储库中有两种方法:

  1. 使用字符串检索特定类别的产品列表
  2. 用字符串检索特定类别

然后我在一个 ActionResult 中使用这两个,然后将它们传递给 View 。

有没有一种方法可以从对数据库的 1 个方法调用中检索产品列表和类别名称、描述等,或者我是否正确地完成了?

提前感谢您的帮助。

我的代码如下:

存储库

public class StoreRepository : topsports.Models.IStoreRepository
{
private topsportsEntities db = new topsportsEntities();

public IQueryable<Product> FindProductsByCategory(string c)
{
var products = from p in db.Products
where p.Category.Name == c
select p;

return products;
}

public Category FindCategory(string c)
{
return db.Categories.SingleOrDefault(cg => cg.Name == c);

}
}

IStoreRepository

public interface IStoreRepository
{
IQueryable<Product> FindProductsByCategory(string c);
Category FindCategory(string c);

}

存储 Controller

 public class StoreController : Controller
{
IStoreRepository storeRepository;

public StoreController()
: this(new StoreRepository())
{
}
public StoreController(IStoreRepository repository)
{
storeRepository = repository;
}

public ActionResult Index(string c)
{
var category = storeRepository.FindCategory(c);

var products = storeRepository.FindProductsByCategory(c).ToList();

var viewModel = new StoreViewModel
{
Products = products,
Category = category

};

return View(viewModel);
}
}

StoreViewModel

public class StoreViewModel
{
public List<Product> Products { get; set; }
public Category Category { get; set; }

}

分类.aspx

<h2><%: Model.Category.Name %></h2>

<p><%: Model.Category.Description %></p>


<ul>
<% foreach (var item in Model.Products) { %>
<li>
<%: item.Name %>,
<strong><%: item.Description %></strong>
</li>
<%} %>
</ul>

最佳答案

存储库的目的是将数据访问层与业务逻辑分离。当您选择通过类别实体检索产品时,您依赖于延迟加载,这是 Entity Framework 的一个实现细节。什么时候你会稍后决定切换到不同的数据访问层(例如手动创建的查询),可能是您不再拥有此功能。

第二个问题是,当您将大量功能放入一个存储库方法中时,这个方法的职责是什么就变得不清楚了。正如@Andrew Barber 所描述的,是的,您将获得很多小方法。然后可以将这些组合起来以产生有用的功能。当您选择创建更大的方法来返回更多结果时,您会遇到另一个问题。当返回例如的方法时三个或四个数据集,你会遇到这样的问题,当你只需要其中两个数据集中的一个或两个时,你要么创建一个新方法,它的功能不如原始方法,要么你将运行四个查询一两个就足够了。

存储库的小方法旨在在组合成更大的整体时产生有意义的结果。很多方法不一定有问题。您的代码看起来不错 :)。

关于c# - 在同一个 Controller ActionResult 中运行我的存储库中的 2 个方法是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005790/

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