我正在使用LINQ-SQL连接到我的SQL Server数据库的MVC应用程序。
目前在获取数据时,我将LINQ对象的属性传递给域模型,然后我在View模型中创建属性。
例如,我的视图模型可能具有以下属性:
public Models.UserModel user { get; set; }
public List<Models.CountryModel> countries { get; set; }
My Domain Models与我的LINQ对象具有完全相同的属性,我将这些属性复制为:
Models.UserModel user = new Models.UserModel();
user.Username = User.Username;
user.FirstName = User.FirstName;
user.LastName = User.LastName;
其中user
是我的Models.UserModel
对象,而User
是我从用户数据库表映射的LINQ对象。
由于我的域模型与我的LINQ对象完全相同,我将这些数据传输到域模型是否有任何优势,或者我可以在我的视图模型中使用LINQ对象,例如:
public User user { get; set; }
public List<Country> countries { get; set; }
使用域模型有哪些优势?这纯粹是与数据库LINQ对象松散耦合吗?
如果使用域模型有优势,那么在我的MVC应用程序中如何最好地构建它们?
它们是否应完全在“Models”文件夹级别(例如子文件夹“DomainModels”和“ViewModels”)拆分或重合(例如“UserEditViewModel.cs”和“UserDomainModel.cs”)。 / p>
答案 0 :(得分:3)
由于我的域模型与我的LINQ对象完全相同,有没有 我将这些数据传输到域模型的优势,或者 我可以在我的View Model中使用LINQ对象吗? 为:
您可以在视图模型中引用域模型,以防它们完全相同。我没有看到重复这种逻辑的任何好处,除了在现实世界中它们永远不会相同。您总是可以查看特定的视图,例如验证甚至显示标签。拥有纯视图模型的优点是您的应用程序不再依赖于您的数据库结构。您可以轻松地翻转/翻转数据访问技术,而无需修改UI部分。我发现这种清晰的分离更易于维护,并且总是倾向于在我的应用程序中实现它。