1

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

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

4

1 回答 1

0

我认为您可以将 CustomerSummaryViewModel 视为报告(CustomerSummaryReport)。可以查询您的实体以获取这样的场景并将它们视为报告。大多数报告更复杂,使用多个实体和聚合查询。该报告非常简单,但您仍然可以像报告一样使用它。

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

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

var reports = session.Linq<Customer>()
  .Where(condition)
  .Select(customer => new Report 
   { 
       FirstName = customer.FirstName, 
       LastName = customer.LastName 
   })
  .ToList();
于 2010-09-12T21:40:27.890 回答