您的第一个选项不合适。这就是所谓的循环依赖,它很糟糕。
您的第二个选择更好,但仍然不是很好。您的模型类无疑将具有仅适用于您的 ui 的字段和方法。它们不属于您的数据层,就像您的数据对象不属于您的 Web 层一样。这是耦合的一个例子——也称为关注点分离不佳——而且它也很糟糕。
最好的选择是将两层所需的数据分离到一组不同的类中(有时称为 dto 的 - 数据传输对象 - 或 poco 的 - 普通的旧类对象)。根据您的需要,这些类可以驻留在您的数据项目中或完全属于自己的项目中。如果您的服务驻留在 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();
}
}
}