1

LINQ 是否替代了表示模型​​?

我在“ASP.NET MVC in Action”一书中读到了有关演示模型的内容。

我想知道为什么要建立一个演示模型?!

例如,在我看来,通过 LINQ 在运行时创建一个新类来投影一个域对象(实体)比创建数十个表示对象更舒服。

所以你怎么看?也许你们中的一些人同时使用:o

我更喜欢的技术是 ASP.NET MVC 和带有 LINQ 或实体框架的 NHibernate。

4

4 回答 4

3

Linq 不能替代表示模型。如果您指的是(它可能是),Linq to SQL 也不是。相反,Linq to SQL 将数据库表映射到 C# 或 VB 类,以便您可以直接在代码中处理数据。

表示模型(或 ASP.NET MVC 中的视图模型)是一个代码类,用于将视图与数据模型或业务类分离。View Model 允许您将验证和视图逻辑等内容放入其中,而不会弄乱您的视图。

请记住,领域驱动设计 (DDD) 的核心实际上只是一种在您和您的客户之间建立通用词汇表(“无处不在的语言”)的方法,从而使设计过程变得更容易和更准确。

请务必查看nerddinnerbook.s3.amazonaws.com/Intro.htm上的 NerdDinner 教程。查看模型在nerddinnerbook.s3.amazonaws.com/Part6.htm进行了详细讨论

于 2009-10-12T16:44:10.997 回答
1

Rookian,我的意思是让存储库公开希望的属性可以用作表示模型。

在您的示例“ CustomerRepository.GetAll().Select(x=>new {firstname = x.Firstname, lastname = x.Lastname}.ToList()”中,您从数据库中获取所有属性,并使用 Linq 将其转换为对象,如果性能是一个问题,这是一个问题。

我自己没有实现过类似的东西,但我目前在我的存储库中使用 Linq to NHibernate。

我猜一个 API 可能看起来像:

IRepository<TEntity>
{
   List<object> FindAll(params Func<TEntity, object>[] properties);
}

客户端使用 API 的地方如下:

var presentation = repository.FindAll(x => x.Firstname, x => x.Lastname);

...并且实现使用数据库仅获取所需的属性。

于 2009-10-13T07:35:02.863 回答
1

单一责任原则

使用表示模型 - 您正在将模型与表示层分离。您的域模型不再负责将所有内容转换为字符串、格式化日期时间等。

即 -从发布的表单与 Linq2Entities 生成的类绑定实体存在问题。表示层很容易解决这个问题。

于 2009-10-14T08:24:33.253 回答
0

当我将存储库模式与规范模式一起使用时,为什么要使用表示模型?

这种模式的具体好处是什么?

使用 Linq,我可以创建适合视图的新对象。例如,我有一个带有 ID、名字、姓氏和地址的客户对象。

在视图中,我只需要名字和姓氏。所以我会创建一个存储库,它有一个返回类型为 IQuerable (或左右)的方法,在控制器中我会使用这样的东西: CustomerRepository.GetAll().Select(x=>new {firstname = x.Firstname, lastname = x.Lastname}.ToList()。通过规范模式,我还可以为此调用添加一些逻辑,即使用选择(where)。

...所以,为了什么表示层:S?

于 2009-10-12T19:03:07.083 回答