LINQ 是否替代了表示模型?
我在“ASP.NET MVC in Action”一书中读到了有关演示模型的内容。
我想知道为什么要建立一个演示模型?!
例如,在我看来,通过 LINQ 在运行时创建一个新类来投影一个域对象(实体)比创建数十个表示对象更舒服。
所以你怎么看?也许你们中的一些人同时使用:o
我更喜欢的技术是 ASP.NET MVC 和带有 LINQ 或实体框架的 NHibernate。
LINQ 是否替代了表示模型?
我在“ASP.NET MVC in Action”一书中读到了有关演示模型的内容。
我想知道为什么要建立一个演示模型?!
例如,在我看来,通过 LINQ 在运行时创建一个新类来投影一个域对象(实体)比创建数十个表示对象更舒服。
所以你怎么看?也许你们中的一些人同时使用:o
我更喜欢的技术是 ASP.NET MVC 和带有 LINQ 或实体框架的 NHibernate。
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进行了详细讨论
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);
...并且实现使用数据库仅获取所需的属性。
当我将存储库模式与规范模式一起使用时,为什么要使用表示模型?
这种模式的具体好处是什么?
使用 Linq,我可以创建适合视图的新对象。例如,我有一个带有 ID、名字、姓氏和地址的客户对象。
在视图中,我只需要名字和姓氏。所以我会创建一个存储库,它有一个返回类型为 IQuerable (或左右)的方法,在控制器中我会使用这样的东西: CustomerRepository.GetAll().Select(x=>new {firstname = x.Firstname, lastname = x.Lastname}.ToList()。通过规范模式,我还可以为此调用添加一些逻辑,即使用选择(where)。
...所以,为了什么表示层:S?