Linq to sql 您是将Linq2SQL查询放在所有地方还是放在专用的DAL类中?
我总是到处插入我的Linq2SQL查询,几乎每个类都是如此 我想知道关于将Linq2SQL查询放在哪里,您的策略是什么 您是将它们放在单独的数据层类中,还是将它们存储在各地使用的地方Linq to sql 您是将Linq2SQL查询放在所有地方还是放在专用的DAL类中?,linq-to-sql,tdd,solid-principles,Linq To Sql,Tdd,Solid Principles,我总是到处插入我的Linq2SQL查询,几乎每个类都是如此 我想知道关于将Linq2SQL查询放在哪里,您的策略是什么 您是将它们放在单独的数据层类中,还是将它们存储在各地使用的地方 我认为我需要改变Linq2SQL查询的策略,并将它们存储到单独的数据层类中。如果我想有效地进行TDD并遵守依赖注入和可靠原则,我认为这是必须的。如果您认为您的LINQ查询是LINQ2SQL查询,那么您就有点忽略了这一点 您有LINQ查询。业务层通过在数据层(datacontext)上进行LINQ查询来访问数据层。L
我认为我需要改变Linq2SQL查询的策略,并将它们存储到单独的数据层类中。如果我想有效地进行TDD并遵守依赖注入和可靠原则,我认为这是必须的。如果您认为您的LINQ查询是LINQ2SQL查询,那么您就有点忽略了这一点 您有LINQ查询。业务层通过在数据层(datacontext)上进行LINQ查询来访问数据层。LINQ2SQL是允许LINQ查询访问SQL Server的组件 这是一个严重的过分简化,但一般的观点是,如果你把所有的LINQ都隐藏在业务层之外,你就不会真正从它存在的原因中受益
如果LIQ2SQL不允许您将DB模式抽象为您喜欢的程度,那么您应该考虑使用实体框架来代替。
< P>将所有的LIQ2SQL查询放到单独的类中,在测试访问它的业务对象时,很容易用“模拟/存根”替换它。还是我错了?我将所有LinqToSQL调用完全打包到一个DAL中。我的网站和业务层对我正在使用的持久性框架一无所知。这样,如果LinqToSql真的死了,或者如果我决定使用一个全新的框架,我就不必搜索我调用DB的所有地方
它还有助于提高可重用性。我可以在使用相同数据库的其他项目中使用相同的业务或DAL。LINQ是一种语言构造。它只需要DAL将您的实体公开为IEnumerable或IQueryable,并且您可以对其使用LINQ。您的DAL可以基于LINQ2SQL或LINQ2Entities或您自己的自定义代码——只要它正确地公开了您的实体。如果使用LINQ2SQL,您会获得一些优势,比如延迟查询执行,但这并不是绝对必要的。我认为在DAL之外避免使用LINQ没有任何意义。如果我想用其他不基于LINQ2SQL的东西替换DAL,我可以。只要我维护基于LINQ的代码所期望的接口,我就可以了 编辑:我的底线是,在它们到达DAL之前,它们不是LINQ2SQL查询,它们只是LINQ。LINQ不会从语言中消失,除非它被更好的东西取代。之所以使用LINQ2SQL,是因为DAL是用LINQ2SQL实现的。我的代码的其余部分并不知道(或关心)这是真的。它可以是LINQ2对象或LINQ2实体或…
- 我使用外部映射李>
- 域类位于单独的程序集中
- datacontext位于助手程序集中李>
- 我有许多xml映射文件
就我的20美分 我不一定要创建单独的业务对象,因为这是LINQ2SQL的要点,您将重新创建许多使LINQ2SQL如此伟大的东西 不过,我建议创建一个包含L2SQL代码的静态类的类库。这使您能够替换单个程序集来更改业务逻辑。此外,如果您有额外的方法来访问数据,那么静态类是实现该逻辑的好地方
不过,如果您的需求稍微复杂一点,并且您不介意创建自己的映射,我会同意Florian的观点。我的最新项目使用ASP.NET MVC框架和LINQ to SQL。因此,我在很大程度上依赖于数据层的存储库模式。因为这是我的第一个LINQtoSQL项目,所以数据库模式在单个DataContext类中表示。随着后续项目的出现,我可以分离出公共数据上下文以供重用
我创建了一个接口,其中包含我计划为特定存储库实现的所有签名,该存储库通常表示单个复杂对象。基于该接口,我实现了两个类:一个用于生产,一个用于测试。我所有的LINQ到SQL查询都保存在存储库类中。在控制器代码中,我访问数据访问方法的存储库。我的观点中不包含任何疑问;我使用自定义视图模型类,这些类使用存储库方法填充到控制器中。我在DAL DLL中使用了Linq2SQL。我喜欢将关注点和其他需要访问相同d的站点或应用程序分开