我知道之前已经问过这些问题,我将首先列出其中一些问题(我到目前为止已经阅读过的):
正如你所看到的那样,关于这个主题的SO本身有一些很好的资源,但是有一个问题/部分的问题,我仍然不确定是否已经阅读了这些内容.
我主要关注IEnumerable和IQueryable问题,更具体地说是DAL与它的消费者之间的耦合.
我发现有关两个接口的建议各不相同,这两个接口都很棒.但是,我关注的是DAL返回IQueryable的含义.据我了解,IQueryable建议/暗示有一个Linq提供商.这是第一个问题 - 如果DAL突然需要来自非Linq提供的数据源,该怎么办?以下方法可行,但它更像是黑客攻击吗?
public static IQueryable<Product> GetAll()
{
// this function used to use a L2S context or similar to return data
// from a database, however, now it uses a non linq provider
// simulate the non linq provider...
List<Product> results = new …Run Code Online (Sandbox Code Playgroud) 由于我一直在整合Linq思维模式,我越来越倾向于通过IEnumerable<T>泛型类型传递集合,这似乎构成了大多数Linq操作的基础.
但是我想知道,对于IEnumerable<T>泛型类型的后期评估,如果这是一个好主意.使用T[]泛型类型更有意义吗? IList<T>?或者是其他东西?
编辑: 以下评论非常有趣.有一件事虽然没有得到解决,但似乎是线程安全问题.例如,如果你接受IEnumerable<T>一个方法的参数并且它在另一个线程中被枚举,那么当该线程试图访问它时,结果可能与那些本来要传入的结果不同.更糟糕的是,试图枚举一IEnumerable<T>两次-我相信抛出一个异常.我们难道不应该努力使我们的方法线程安全吗?