Linq To SQL不可扩展是什么意思?

3

我曾经听一些开发者说L2S不可扩展。 我不确定我完全理解这是什么意思。 我猜想它与你的应用程序中的层有关(如果你的应用程序是分层的)。 请问有人能够对这个主题进行阐述吗?

谢谢, Avi


已经在https://dev59.com/inVC5IYBdhLWcg3wsTRi中涵盖。 - Andrew
3个回答

2
这更多是关于功能的可扩展性。如果你查看LINQ生成的领域对象,你会注意到有很多冗余代码,如果你转向其他持久化框架(如NHibernate),这些冗余代码可能就变得不必要了。一种选择是编写自己的领域层,使其更抽象,并将生成的领域映射到抽象层。保持领域层“无冗余”可以让你在不同的持久化框架中重复使用它。L2S在这方面并不是很好。其他问题可能包括性能,但我认为这在后续版本中得到了改善?

感谢您的迅速回复。 如果我理解正确,L2S的基本作用就是将您的领域层链接到数据访问层,对吗?这听起来很糟糕,但它是可扩展性问题还是维护问题? 还有一件事情不太清楚,您说有两个领域层,一个是由开发人员编写的,另一个是生成的。我以前从未听说过两个领域层。生成的领域是由代码生成器创建的吗?然后映射到其他领域层?我仍然不理解这个概念。 非常感谢。 - Avi Shilon
这只是一种功能性的可扩展性。L2S具有实体生成器,它基于您的数据库架构创建域/实体层。从中获得的领域模型与L2S紧密耦合。如果您想在以后能够移植到不同的持久化框架,您可能会有兴趣创建一个抽象的领域模型。然而,每次您想要检索或持久化数据时,您都必须将L2S实体映射到您的抽象领域实体(并返回),这是额外的开销。如果您的应用程序是可扩展的,您可以想象这里的痛苦。 - Sergey
这对大多数项目来说不是问题。并非每个人都像这样设计。我只是一个纯粹主义者 :) - Sergey

2

确实很有趣... 但我猜他们可能已经找到了一些克服它局限性的方法。 - Avi Shilon

1
即使您的集合很小,由代码生成器生成的SQL也永远不会像手写的SQL一样优化,特别是如果获得良好的执行计划高度依赖于选择正确的索引。
假设您手动编写这些情况并使用SP,在数据非常大的情况下,无论您的数据库引擎是否能够帮助您,您都需要许多技巧来实现有效的内存使用。
但是每个抽象都有其限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接