我需要开发一个Windows服务。以前只使用Asp.Net MVC没有完成任何基于Windows的应用程序。
这方面的基本功能包括访问数据库,然后使用DB中的值调用Web服务,然后在DB中更新响应。
目前正计划添加DataAccesslayer,Business&服务层
我所拥有的查询很少,我们可以使用
Entityframework&在Windows应用程序中使用依赖项注入的存储库模式。
建议使用依赖注入。
请就此实施的任何推荐方法提出建议
答案 0 :(得分:0)
您在问题中只列出了模糊的想法,因此答案有些高级。
1)我会密切评估你是否真的需要在ORM之上的存储库模式。为另一个ORM切换EF的几率是多少?如果您认为可以,甚至可能让您的项目完全切换数据库体系结构(SQL到NoSQL?),那么请转到存储库。否则可能没有。
回购可以增加很多工作,但效益不大。您可能会发现,一旦您拥有一个定义良好的代码优先模型,那么DbSet顶部的repo层就会成为EF中非常相似的调用或一系列调用的代理。这是因为EF中的DbSet已经实现了一个存储库模式,这对您的项目来说已经足够了。
如果您的模型定义不明确,那么随着模型的更改,您可能会发现自己需要做很多工作,不仅要更改DbSet模型和使用它的类,还要更新所有存储库代码和使用它的类。
同样,DbContext已经为您实现了工作单元模式。从字面上看,DbContext是一个工作单元,其生命周期管理应该反映出来。
如果您的存储库的主要原因是抽象数据库,那么这就是EF已经为您做的事情。
对于像EF这样的ORM,存储库的价值总是存在争议。您可以通过快速Google找到很多内容,还可以在Stack Overflow上找到更多内容。
2)虽然我完全沉迷于DI,但我只是尝试在需要的地方使用它,因为它再次增加了不必要的额外复杂性。 Web服务调用似乎是一个明显的依赖,可能会受益。在任何地方注入一个存储库我怀疑我只是因为我总是怀疑存储库在EF之上的价值。请记住,DbContext应该小心注入并且不是线程安全的。 This article goes into depth on that.
3)开发Windows服务时,TopShelf是我的理想选择。它使得它们的开发和推出变得更加容易。 There is a Nuget package for it。我从不后悔使用它。