这是我第一次使用MVC进行Web项目,而我正在尝试基于三层实现它:MVC,DAL(数据访问层)和BLL(业务逻辑层)。
我也在尝试使用存储库,而我正在代码优先。
无论如何,我在网上搜索过很多但是如果你有一个很好的参考资料,我会很高兴看到它。
我目前的项目如下:
以下是我的问题:
表示表的产品和用户类在哪里?似乎我需要在BLL中使用它们,我在DAL中并不需要它们,而是PASContext
。
我在哪里发起PASContext
?在我在互联网上看到的所有例子中,没有人在存储库中创建一个带有0参数的构造函数,这意味着上下文不是在存储库中创建的(我已经读了一些原因,为什么这样所有的存储库都会使用一个上下文)。
如果我试图在PASContext
中启动ProductBLL
,编译器说它无法识别它并且我错过了一个引用(尽管我添加了所需的引用和名称PASContext
标记为蓝色,就像vs识别它一样)
PASContext
是从DbContext
继承的类。
以下是一些要演示的代码:
public class ProductsBLL
{
private EFRepository<Product> productsRepository;
private List<Product> products;
public ProductsBLL()
{
PASContext context = new PASContext();
productsRepository = new EFRepository<Product>(context);
//LoadData();
}
ProductViewModel
,从ProductsBLL
获取具有列表的数据的产品并将其转换为ProductViewModel
列表,然后将其发送给控制器?此外,在ProductController
中,我是否只启动ProductsBLL
?我没有启动任何存储库或上下文,对吧?
如果有人可以向我展示一些使用存储库,三层架构并从数据库中获取数据的项目,将其传输到BLL并从那里传输到MVC层,并使用ViewModel
将其显示给客户端它会很棒。
答案 0 :(得分:4)
表示应该是表的产品和用户类在哪里?
我希望这些项目可以被所有其他项目引用。也就是说,所有其他项目都可以依赖于模型的解决方案。在onion architecture的情况下,模型属于解决方案核心的核心。
在你的情况下,我会将它们放入BLL。
我在哪里启动PASContext?
您通常不会直接看到这一点的原因是因为使用Dependency Injection或 DI (What is dependency injection?)
非常常见这意味着您不需要直接实例化DbContext;你让DI容器为你做。在我的MVC应用程序中,上下文有PerWebRequest lifestyle。
PerWebRequest生活方式:
组件的实例将在单个Web请求的范围内共享。该实例将在Web请求范围内第一次请求时创建。
在发出请求时创建上下文,在整个请求中使用(因此所有存储库都可以获得第一级缓存的好处),然后在请求完成时处理上下文。所有这些都由DI容器管理。
我是否需要创建ProductViewModel [...]?
您通常只有一个视图模型可用于视图。视图应该是它自己的对象,它具有视图显示所有内容所需的所有内容。您建议您创建多个视图模型对象并将其传递给视图。如果您想为该视图显示更多信息,我对该方法的关注是什么?比如,您想要向用户显示单个DateTime对象。现在你要显示一个东西,但是你要将很多对象传递给视图。
相反,将事情分开。创建单个视图模型并将其传递给视图。如果您有一部分视图需要显示许多内容,请让视图将其称为子操作或部分操作,以便视图不会执行太多操作。
如果有人可以向我展示一些使用三层架构的项目
我不确定三层架构。以下是一些使用各种解决方案体系结构的示例项目:
没有一种正确的方法 - 只是好的和坏的方法。
答案 1 :(得分:0)
我会从这里开始。您可以从准备好的资源中获得有关此类广泛主题的更多信息。
http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3
<强>更新强>
深入的教程
http://www.codeproject.com/Articles/70061/Architecture-Guide-ASP-NET-MVC-Framework-N-tier-En http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-models-and-data-access http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4 http://www.codedigest.com/Articles/ASPNET/187_How_to_create_a_website_using_3_tier_architecture.aspx http://www.mvcsharp.org/Basics_of_MVC_and_MVP/Default.aspx
示例项目
http://prodinner.codeplex.com/ http://www.nopcommerce.com/ http://www.mvcsharp.org/Getting_started_with_MVCSharp/Default.aspx