Linq to SQL&;逻辑分区(DAL、BLL)

Linq to SQL&;逻辑分区(DAL、BLL),linq,linq-to-sql,data-access-layer,bll,Linq,Linq To Sql,Data Access Layer,Bll,我们将在.Net中重建我们的一个站点。我读过很多文章,非常喜欢将我们的项目分为数据访问层(DAL)、业务逻辑层(BLL)和表示层(我们来自经典的ASP,所以这对我们来说是一个巨大的步骤)。我也非常喜欢LINQtoSQL 由于linqtosql的目标是快速开发,那么linqtosql真的有可能拥有DAL、BLL和表示层吗?使用LINQtoSQL,DAL是否会返回实体或Linq代码,这些实体或代码可能会在BLL中修改?DAL和BLL与Linq到SQL之间的关系似乎是一个模糊的话题,没有达成一致意见—

我们将在.Net中重建我们的一个站点。我读过很多文章,非常喜欢将我们的项目分为数据访问层(DAL)、业务逻辑层(BLL)和表示层(我们来自经典的ASP,所以这对我们来说是一个巨大的步骤)。我也非常喜欢LINQtoSQL

由于linqtosql的目标是快速开发,那么linqtosql真的有可能拥有DAL、BLL和表示层吗?使用LINQtoSQL,DAL是否会返回实体或Linq代码,这些实体或代码可能会在BLL中修改?DAL和BLL与Linq到SQL之间的关系似乎是一个模糊的话题,没有达成一致意见——因为这对我们来说是一个巨大的飞跃,所以在深入研究任何事情之前,我绝对希望有一个好的游戏计划

类型化数据集似乎更适合这一点,但如果我能用Linq获得类似的东西,我会走这条路


我想远离nHibernate和其他第三方库。

我们正在构建您所描述的内容,我们正在使用L2S来实现这一点。同意DAL和BLL之间的关系有点模糊,但我们有一个不同的BLL和一个不同的DAL。我们的所有逻辑都在BLL中,所有数据检索/修改都是通过调用DAL(使用LINQ调用)完成的

我们的应用程序不使用类型化数据集。我们已经构建了实体类来表示我们的对象。现在我已经花了几个月的时间构建了其中的一部分,我看我们(我)再也不会回到数据集了

同样,我也不会因为L2S“旨在快速发展”而挂断电话。这使它听起来像一个原型工具。我们发现它是一种工业实力工具。这可能与微软现在所说的相反,因为他们更希望人们使用EF


Randy

我建议退一步,再次审视您的需求

您需要真正的3层(即物理部署到不同的机器)还是只需要应用程序的逻辑分区?

我在写的第一个大型应用程序中就犯了这个错误。我从来没有需要物理3层(也永远不会需要),但应用程序就是这样设计的。最显著的结果是,I Linq2Sql不支持对实体进行断开连接的更改跟踪。我曾经解决过这个限制,但是它严重违反了持续无知的概念(人们总是事后更清楚,是吗?)

真正的n层对应用程序体系结构有许多其他影响

您将需要消息传递、数据传输对象等。Linq2SQL是一个不错的ORM,与LINQ的紧密集成提供了独特的可能性。其他ORM仍需要一些时间才能赶上。NHibernate 3.0是隧道尽头的一盏灯。 如果您有简单的数据模型,并且可以以“每表一类”的方式进行映射,那么Linq2SQL是一个很好的ORM

对于断开连接的更改跟踪(如果要进行n层,则需要此跟踪),其他ORM有更好的支持

最后:

(我们来自经典ASP,因此 (对我们来说是一个巨大的进步)


在这种情况下,我会特别小心。交换技术常常被低估。即使是团队中最聪明的程序员也会做出错误的决定,因为他们缺乏技术经验。尽管如此,重要的是要走新的路,提高你的技能。从不失败的人永远不会成功。

我想,LINQ到SQL是目前最好的选择。它确实让处理数据变得轻松,而且几乎很有趣。:-)如果您对LINQtoSQL感兴趣,我会看看我们的项目。它对LINQ to SQL有一些很好的增强,使其成为一个更好的整体解决方案。

我想说L2S是DAL。单独类中的L2S+业务逻辑成为合并的DAL+BLL,DAL端是L2S运行时,L2S生成的代码(datacontext、实体类等)

您仍然可以轻松地将它们分开,以便L2S生成的部分、实体和datacontext的任何扩展都位于单独的DLL中,其他业务逻辑位于单独的DLL/服务/等中。但是,在许多情况下,不需要将它们分开

在使用L2S时,将DAL+BLL分离的一个原因是,如果您预见将来将使用另一种数据访问技术,或者如果您可能使用多种数据访问技术。将一个单独的DAL与任何L2S特定的材料分开,应该可以更容易地关闭DAL。如果出于这个原因想要分离DAL+BLL,L2S DAL-DLL应该公开实体类、任何派生类或投影类,以及获取实体或集合(列表等)的方法,但将DataContext保留在DAL类内部,以避免L2S特定的内容(L2S查询等)流入BLL

杰莫



由于其他人提到了L2S工具,这里有一个更完整的总结:我认为对于linq,DAL和BLL概念不再有意义。所以我安排了linq类和
代码(父)文件夹下的“域”文件夹下的一些getter和setter。然后我创建了“Repository”类和“FontEnd”类。

分区DAL、BLL等与n-tier不太一样。n层通常意味着物理分区。虽然为表示和业务逻辑提供逻辑(例如,汇编)分区总是好的,但我认为这是与物理分区不同的关注点。您想解决哪一个问题?我关心的是逻辑分区。您可以使用LinqToSql创建一个单独的DAL&BLL,但这取决于您自己,您必须定义在何处绘制线。LinqToSql鼓励您模糊界限,因此您必须积极地与之抗争,以创建清晰的关注点分离。