LINQ与演示模型

时间:2009-10-12 16:41:07

标签: asp.net-mvc linq-to-sql model presentation

LINQ是否替换演示模型?

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

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

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

那你觉得怎么样?也许你们有人同时使用:o

我首选的技术是使用LINQ或实体框架的ASP.NET MVC和NHibernate。

4 个答案:

答案 0 :(得分:3)

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

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

请记住,领域驱动设计(DDD)的核心实际上只是一种在您和您的客户之间建立通用词汇(“普遍存在的语言”)的方法,这样设计过程就变得更容易,更准确

请务必查看nerddinnerbook.s3.amazonaws.com/Intro.htm处的NerdDinner教程。视图模型在nerddinnerbook.s3.amazonaws.com/Part6.htm

中详细讨论

答案 1 :(得分:1)

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

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

我自己没有实现过这样的功能,但我目前正在我的存储库中使用Linq到NHibernate。

我猜API看起来像:

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

客户端使用API​​如下:

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

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

答案 2 :(得分:1)

Single responsibility principle

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

即。 - there's a problem带有Linq2Entities生成类的已发布表单中的绑定实体。表示层很容易解决这个问题。

答案 3 :(得分:0)

当我使用带有规范模式的存储库模式时,为什么要使用演示文稿 模型?

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

使用Linq,我可以创建适合视图的新对象。例如,我有一个Customer对象,其中包含ID,名字,姓氏和地址。

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

...所以以及表达层:S?