【问题标题】:Implementing 3-tier Architecture in MVC3在 MVC3 中实现 3 层架构
【发布时间】:2013-06-29 12:36:00
【问题描述】:

我想创建一个简单的应用程序,用户可以在其中注册自己的凭据,如名字、姓氏等..单击注册按钮后,它会将他带到邮件中,以便他将拥有的用户身份验证一个链接并单击该链接,它将重定向到登录页面。我想实现它,但在 MVC3 中使用 3 层架构。我通过选择 MVC 模板创建了项目并将其命名为演示文稿并获取 BLL 和 DAL我应该怎么办? 我已经创建了我的模型:

public class Register
    {
        public int Id { get; set; }
        public string  First_Name { get; set; }
        public string Last_Name { get; set; }
        public string Email_Address { get; set; }
        public bool Accept_Term { get; set; }
        public bool Male { get; set; }
        public bool Female { get; set;}
        public string Current_Location { get; set; }
    }

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    为您的BLL 创建一个Class Library,为您的DAL 创建一个Class Library,然后在您的MVC 项目中引用BLL,并在您的BLL 项目中引用您的DAL。现在您的MVC 项目将调用BLL,然后调用DAL 来实际进行数据存储/检索。在某些情况下,您的BLL 可以只是一个传递,而在其他情况下执行业务规则或其他操作。

    您也应该考虑将您的 Model 类移动到单独的 Class Library 中,这样您的所有层(MVCBLLDAL)都可以“看到”并使用您的 @987654338 @对象;这当然意味着所有层都需要引用Model 项目。传递对象比为对象的每个值都有参数的方法要容易得多。

    【讨论】:

    • 感谢您的帮助..因为我是 3 层架构的新手,并且更熟悉 MVC。所以我知道创建模型、控制器和视图。所以请让我知道我把什么放在哪里? @卡尔
    • 除此之外,我将模型称为 DTO,例如。注册 DTO。由于模型在 MVC 中具有不同的含义,因此它们基本上是驻留在 MVC Web 应用程序中的视图模型。因此,根据您需要在视图中看到的内容,创建具有这些属性的视图模型。
    • Solution Explorer中右击你的Solution,然后选择Add -> New Project。您现在应该看到Add New Project 对话框,它应该有Visual C# - Web 作为过滤器,将其更改为Visual C#,然后单击Class Library。将库命名为 BLL 并确保它保存到与您的 MVC 项目相同的相对路径。冲洗并重复DAL
    • @Sunny - 是的,我也想说,Model 在 MVC 中具有特殊含义,而在系统的其他层中它可能意味着其他东西。我通常打电话给我的Domain,但DTO 也可以。此外,您可以保留现有的 Model 类并创建 DomainDTO 版本,这样您就可以保留现有的 MVC 结构并为其他层添加顶部。
    • 谢谢!!!到目前为止,我的理解是,我的原始 MVC 项目将被称为演示文稿,因为我必须删除模型文件夹,并且我将只有控制器和视图......只是M 对包含属性的模型感到困惑,我将通过控制器在视图中访问这些属性,但是我必须在 BLL 中还是在 DAL 中定义它?
    【解决方案2】:

    我认为理解为什么需要 n 层架构很重要。如果您最重要的要求是简单,那么实际上不需要将您的应用程序拆分为 n 层。

    但是,如果您需要灵活性,这种选择会带来不利影响。另一方面,多层提供了灵活性,成本是构建它们所需的工作量。

    作为您想要拥有 n 层架构的示例,想象一下这种情况。您使用 Entity Framework 4.x 构建应用程序。在您的数据访问层中。然后 EF 5.0 启动并且您想要升级。如果您的其他层完全不了解您正在使用的数据访问技术(应该如此),那么在将 DAL 升级到不同版本或数据库类型时应该很少有问题。我强调无知的部分。应用程序中的每一层都应该忽略其他层中的依赖关系,这将允许您构建一个解耦的可插拔架构。

    这是一个很大的话题,如果您有兴趣了解更多信息,我建议您查看领域驱动设计技术。不要仅仅为了它而拥有 n 层。数据传输对象 (DTO) 是在这些自包含层之间传输数据的对象。这是必要的,因为 DAL 中的“Person”对象与业务层中的“Person”对象不同。 DTO 在两个对象之间的映射。

    看看http://www.dofactory.com/。您将看到一个简单的 n 层 MVC 应用程序,它具有多个 UI(winforms、MVC 等)与一个自包含的业务层通信。这也应该让您更好地了解将项目放在哪里以及为什么需要它们。

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 2010-12-07
      • 2015-01-31
      • 2012-03-18
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多