使用LINQ时是否需要自定义域模型?

时间:2013-02-01 11:31:31

标签: asp.net sql-server asp.net-mvc asp.net-mvc-3 model

我正在使用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>

1 个答案:

答案 0 :(得分:3)

  

由于我的域模型与我的LINQ对象完全相同,有没有   我将这些数据传输到域模型的优势,或者   我可以在我的View Model中使用LINQ对象吗?   为:

您可以在视图模型中引用域模型,以防它们完全相同。我没有看到重复这种逻辑的任何好处,除了在现实世界中它们永远不会相同。您总是可以查看特定的视图,例如验证甚至显示标签。拥有视图模型的优点是您的应用程序不再依赖于您的数据库结构。您可以轻松地翻转/翻转数据访问技术,而无需修改UI部分。我发现这种清晰的分离更易于维护,并且总是倾向于在我的应用程序中实现它。