模型在我的解决方案中属于哪里?

时间:2013-12-15 01:04:41

标签: asp.net-mvc architecture three-tier

这是我第一次使用MVC进行Web项目,而我正在尝试基于三层实现它:MVC,DAL(数据访问层)和BLL(业务逻辑层)。

我也在尝试使用存储库,而我正在代码优先。

无论如何,我在网上搜索过很多但是如果你有一个很好的参考资料,我会很高兴看到它。

我目前的项目如下:

current project

以下是我的问题:

  1. 表示表的产品和用户类在哪里?似乎我需要在BLL中使用它们,我在DAL中并不需要它们,而是PASContext

  2. 我在哪里发起PASContext?在我在互联网上看到的所有例子中,没有人在存储库中创建一个带有0参数的构造函数,这意味着上下文不是在存储库中创建的(我已经读了一些原因,为什么这样所有的存储库都会使用一个上下文)。

  3. 如果我试图在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();
        }
    
    1. 关于View模型,例如,如果我想要为客户端显示产品列表,是否需要创建ProductViewModel,从ProductsBLL获取具有列表的数据的产品并将其转换为ProductViewModel列表,然后将其发送给控制器?
    2. 此外,在ProductController中,我是否只启动ProductsBLL?我没有启动任何存储库或上下文,对吧?

      如果有人可以向我展示一些使用存储库,三层架构并从数据库中获取数据的项目,将其传输到BLL并从那里传输到MVC层,并使用ViewModel将其显示给客户端它会很棒。

2 个答案:

答案 0 :(得分:4)

问题1

  

表示应该是表的产品和用户类在哪里?

我希望这些项目可以被所有其他项目引用。也就是说,所有其他项目都可以依赖于模型的解决方案。在onion architecture的情况下,模型属于解决方案核心的核心。

Onion architecture overview

在你的情况下,我会将它们放入BLL。

问题2

  

我在哪里启动PASContext?

您通常不会直接看到这一点的原因是因为使用Dependency Injection DI What is dependency injection?

非常常见

这意味着您不需要直接实例化DbContext;你让DI容器为你做。在我的MVC应用程序中,上下文有PerWebRequest lifestyle

PerWebRequest生活方式:

  

组件的实例将在单个Web请求的范围内共享。该实例将在Web请求范围内第一次请求时创建。

在发出请求时创建上下文,在整个请求中使用(因此所有存储库都可以获得第一级缓存的好处),然后在请求完成时处理上下文。所有这些都由DI容器管理。

问题3

  

我是否需要创建ProductViewModel [...]?

您通常只有一个视图模型可用于视图。视图应该是它自己的对象,它具有视图显示所有内容所需的所有内容。您建议您创建多个视图模型对象并将其传递给视图。如果您想为该视图显示更多信息,我对该方法的关注是什么?比如,您想要向用户显示单个DateTime对象。现在你要显示一个东西,但是你要将很多对象传递给视图。

相反,将事情分开。创建单个视图模型并将其传递给视图。如果您有一部分视图需要显示许多内容,请让视图将其称为子操作或部分操作,以便视图不会执行太多操作。

您的方法:

Approach #1

一种不同的方法:

Approach #2

结论

  

如果有人可以向我展示一些使用三层架构的项目

我不确定三层架构。以下是一些使用各种解决方案体系结构的示例项目:

没有一种正确的方法 - 只是好的和坏的方法。

答案 1 :(得分:0)