Asp.net mvc ASP.NETMVC2-模型与存储库的耦合
关于问题,假设我们有以下场景- 实现Asp.net mvc ASP.NETMVC2-模型与存储库的耦合,asp.net-mvc,interface,model,entity,Asp.net Mvc,Interface,Model,Entity,关于问题,假设我们有以下场景- 实现IUser [MetadataType(typeof(IUser))] public class User : IUser 以及一个存储库,用于从我们想要使用的任何数据存储中保存、检索这些数据 public class UserRepository : IRepository<User> IQueryable<User> GetAUserBySomeCriteriaOrOther(int aParam, string anotherP
IUser
[MetadataType(typeof(IUser))]
public class User : IUser
以及一个存储库,用于从我们想要使用的任何数据存储中保存、检索这些数据
public class UserRepository : IRepository<User>
IQueryable<User> GetAUserBySomeCriteriaOrOther(int aParam, string anotherParam);
公共类用户存储库:IRepository
可读取的GetAUserBySomeCriteriaOrOther(在aParam中,字符串另一个参数);
更进一步,我们将在顶部有一个控制器,也许还有一个视图,每个视图都需要一个IQueryable
的实例
因此,我的问题是:
与IQueryable
相比,将结果作为IQueryable
从存储库传回有哪些优点/缺点
我问这个问题的原因是,我看到的大多数示例/演示都会使用
IQueryable
,但在我看来,这似乎是在更高层和生成用户
类的任何方法之间引入了耦合。假设我想从Linq改为Sql,再改为实体框架——这不是一个大问题吗?EntityFramework不支持通过接口进行查询。Linq2Sql可以解决这个问题
通常,在所有.NET ORM之间,您的用户类看起来都是相同的。当您切换ORM时,您的linq和模型类可能不会改变。很抱歉稍微重复一下这一点,但要明确:在本例中,我将有一个类用户,它将从我使用的任何存储库/ORM中传递回来?因此,我可以从Linq2SQL开始,用一个月的时间,然后决定实际上让我们改为NHibernate,只要NHibernate存储库返回相同的用户类,上面的层就可以很好地进行下去了?很有可能。用户的形状/定义不会改变,因此所有调用代码都不会在意。我有一个演示/scratchpad项目,我经常切换到ORM,它非常容易做到。