![]() |
1
1
如果您使用iQuery作为您的退货而不是IEnumerable,则无需支付任何费用: customerRepository().getAll().find(1),因为在请求数据之前,AsQueryable实际上不会执行。这意味着Linq可以将其优化为: 选择…从…其中id=1而不是 得到一切。找到id=1的位置 有关解释,请参阅本文: Why use AsQueryable() instead of List()? 使用这种方法,您可以创建一个匿名类,并进一步缩小通过线路传输到您想要的数据的范围。这样,Linq生成的查询将得到最充分的优化。 |
![]() |
2
2
为了实现这些目标,我创建了一个简单的“视图”类,例如customerview,它只包含显示概述所需的属性。 然后,我的存储库有一个方法,该方法返回这些CustomerView对象的集合。 在我的项目中,我主要使用NHibernate。NHibernate允许你使用“投影”。 所以,我在我的存储库中所做的是: (请注意,下面的代码只是一些伪代码,它不会编译)。
实际上,归根结底是这样的:我告诉我的O/R映射器它应该查询客户,但是它应该返回“customerview”类型的实体。 在投影的定义中,我还定义了客户类的哪些属性映射到客户视图类的哪些属性。 然后,O/R映射器足够智能,可以生成一个非常简单的查询,该查询只检索填充customerview类所需的字段。 例如,执行的查询可以简单到:
|
![]() |
3
1
如果您必须从数据库中检索列表,那么您的建议是有意义的,但是我将研究一个LINQ和匿名类型的解决方案。 如果客户列表已经存在于内存中,那么就没有节省。 |
![]() |
4
0
你可以结合尼桑和弗雷德里克(匿名类型和NHibernate)使用的技术,使用LINQ到NHibernate。 比尔·瓦格纳更有效的C中的第31项说“通过使用匿名类型限制类型范围”,我同意。顺便说一句,我推荐整本书。 |
![]() |
Tony Raimo · 域实体是否应该调用存储库? 7 年前 |
![]() |
Seb · DDD只读存储库返回“值对象” 7 年前 |
![]() |
tlt · 使用嵌套对象和大集合进行聚合根优化 7 年前 |
![]() |
PatrickSJ · DDD,状态对象/值对象 7 年前 |
![]() |
msmani · DDD更改聚合根id 7 年前 |
![]() |
DuskMcDusk · 逻辑和性能中的聚合根冲突 7 年前 |