LINQ是否替换演示模型?
我在“ASP.NET MVC in Action”一书中读到了有关演示模型的内容。
我想知道为什么要建立一个演示模型?!
例如,通过LINQ在运行时创建一个新类来预测域对象(实体)在我看来比创建几十个表示对象更舒服。
那你觉得怎么样?也许你们有人同时使用:o
我首选的技术是使用LINQ或实体框架的ASP.NET MVC和NHibernate。
答案 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?