ASP.NET MVC数据访问层
问题描述:
我正在开发ASP.NET MVC项目。在我的解决方案中,我有以下项目: BlogApp.Web(ASP.NET MVC应用程序), BlogApp.Data(类库)ASP.NET MVC数据访问层
我想知道如何实现数据访问层。我想使用EntityFramework Code First方法。我在考虑Repository模式,但这真的有必要吗?我已经读过,它只是ORM之上的下一层,这不是真的需要。所以,而不是写作方法,如:
GetAllPosts(Tag t) {
db.Posts.Where(p => p.Tags.Contains(t)).Skip(x).Take(y).Select(p => p);
}
我在控制器中创建数据库上下文,并写入相同的查询?我不需要在我的模型周围实现分页和编写包装。
答
不知道这个问题是否属于这里。不管怎么说,如果你在你的控制器中写入数据访问逻辑,并且在另一个控制器中需要相同的逻辑,你会怎么做?复制 - 将其粘贴到新的控制器中?这只是不好。任何时候,你在复制和粘贴你需要退后一步,这里一定有什么问题(也就是代码味道)。
将逻辑分离到不同的层将使您的代码更易于维护和测试。相信我!
答
您可能听说过有关Repository模式的消息,它在某些阵营中失宠了 - 例如参见Jimmy Bogard's blog。这并不意味着查询应直接写入控制器,除非您的应用程序非常非常简单。
如前所述,您的查询应该只写入控制器可以使用的一个位置 - 这可以位于存储库方法中,也可以存储在专用的查询对象中,这两者都可以提供更好的抽象并避免重复。
简单地说 - 您的应用程序是否打算有多个前端,这将需要为您的数据访问层单独组装?如果不是,你可能会考虑合并这两个程序集,并只使用命名空间来保持组织。
请参阅干燥原则:不要重复自己。在短期内,可能需要更长的时间才能完成设置(与复制和粘贴相比,时间更长),但从长远来看,它将为您节省大量时间进行维护和测试,从而进行调试 - 我们都知道这会花费比首先编写代码。 – TODOName