直接从数据库加载演示模型

时间:2010-09-12 20:13:15

标签: winforms nhibernate presentation-model

我正在开发一个2层应用程序,WinForms客户端直接调用数据库。在其中一个场景中,我需要向用户显示Customer实体列表。问题是Customer实体包含很多属性(有些很重),我只需要其中的两个 - 名字和姓氏。因此,为了提高性能并使表示逻辑更清晰,我想创建某种仅具有所需属性的CustomerSummaryViewModel类,并使用NHibernate的投影功能来加载它。我关注的是,在这种情况下,我的数据访问逻辑与演示相结合,对我来说,它在概念上似乎是错误的。

您认为这是好的还是有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

我认为您可以将CustomerSummaryViewModel视为报告(CustomerSummaryReport)。可以查询您的实体以查找此类方案并将其视为报告。大多数报告都比较复杂,使用多个实体和聚合查询。此报告非常简单,但您仍可以像报告一样使用它。

你还提到表现很重要。这是使用单独的报告查询和DTO的另一个原因。客户实体听起来像您使用的“主要”实体之一。使用延迟加载的属性未初始化从数据库中检索它们需要花费大量时间,这可能是优化客户实体本身的警告,而是使用报告查询来检索有关它们的信息。只是一个警告,因为我已经看到了需要这种情况的情况。

顺便说一句,您可以考虑使用linq而不是投影来获得更简单的语法:

var reports = session.Linq<Customer>()
  .Where(condition)
  .Select(customer => new Report 
   { 
       FirstName = customer.FirstName, 
       LastName = customer.LastName 
   })
  .ToList();