【问题标题】:Models - in Data Project or Web Project?模型 - 在数据项目或 Web 项目中?
【发布时间】:2012-10-15 04:15:49
【问题描述】:

创建新的 ASP.NET MVC3 应用程序时,默认项目中有一个Models 文件夹。此Models 文件夹包括AccountModels - RegisterModelLoginModel 等。

我有一个单独的 DAL 项目 - 它包括一个 repository 和一个 service

现在,我的service 中有一个方法:

TblUser Register(RegisterModel model);

为此,我必须在我的数据项目中引用 Web 项目。

这合适吗,还是应该将我的Models 文件夹包含在我的数据项目中?

【问题讨论】:

    标签: asp.net-mvc-3 model-view-controller models


    【解决方案1】:

    您的第一个选项不合适。这就是所谓的循环依赖,它很糟糕。

    您的第二个选项更好,但仍然不是很好。您的模型类无疑将具有仅适用于您的 ui 的字段和方法。它们不属于您的数据层,就像您的数据对象不属于您的 Web 层一样。这是耦合的一个例子 - 也称为关注点分离不佳 - 而且它也很糟糕。

    最好的选择是将两层都需要的数据分离到一组不同的类中(有时称为 dto's - 数据传输对象 - 或 poco's - 普通的旧类对象)。根据您的需要,这些类可以驻留在您的数据项目中或完全属于自己的项目中。如果您的服务驻留在 WCF 服务中,则这些类通常是 DataContracts。然后,在您的 MVC 项目中,您应该拥有您的模型,就像它们现在一样,但它们应该包含对您的 POCO 的引用,而不是保存它们自己的任何数据。因此,在您的特定情况下,您将在数据项目中创建一个 RegistrationInfo 类(或任何您想调用的类),然后将一个 RegistrationInfo 类型的字段添加到您的模型并将其传递给您的服务而不是整个 RegistrationModel。

    编辑:添加示例

    namespace MyProject.Data.Objects {
        public class RegistrationInfo {
    
            [Required]
            public string Username { get; set; }
    
            [Required]
            public string Password { get; set; }
    
            [Required]
            public string Email { get; set; }
    
        }
    }
    
    namespace MyProject.Data {
        public class MyService {
            public TblUser Register(RegistrationInfo info) {
                // .. save to the database ..
            }
        }
    }
    
    namespace MyProject.UI.Models {
        class RegistrationModel {
            public RegistrationInfo Info { get; set; }
    
            /* Fields which the ui needs but the database does not */
            public bool ConfirmPassword { get; set; }
            public bool AllowFreeEmailAddresses { get; set; }
    
            public void Save() {
                new MyProject.Data.MyService().Register(this.Info);
            }
    
            public RegistrationModel() {
                this.Info = new RegistrationInfo();
            }
        }
    }
    

    【讨论】:

    • 您能举个例子吗?我不太确定我是否遵循您的想法。抱歉,我有时和三年级学生一样聪明……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    相关资源
    最近更新 更多