我们目前拥有的是一个相对较旧的代码库,使用 EntitySpaces(其实并不重要,但它是一个 ORM,在过去很好用,但根据我最近的 EntityFramework 经验,它不再那么重要了)作为用于直接访问数据库的 ORM。我现在需要更改当前直接依赖于 EntitySpaces 对象的应用程序的许多部分。这不是很好,但现在就是这样。我的总体想法是引入一个层,该层引入中性的、不感知持久性的对象,编写某种存储库接口来获取、更新等这些对象,并编写一个仍然使用 EntitySpaces 的(第一个)实现。然后我可以重构所有当前直接使用 EntitySpaces 的类和组件。
这是我的问题/不安全感:
一般来说,我是想让一个存储库对象坐在某个地方还是更好地为组件提供一个返回(特定)存储库的工厂?也许我什至可以针对不同类型的对象将存储库拆分为不同的接口,我猜这会导致一些 20-ish 接口。
假设我有 UI 组件,它们现在对数据库执行大量操作。如果我重写它们以针对存储库工作,是更好地“给”这些组件一个存储库对象,还是以他们甚至不必知道某处有存储库的方式重写此 UI 组件?想象一下,有一个对话框可以让您Part
从数据库中加载、更改并发送回。这可以看作是某种界面,当用户点击更新或删除按钮PartEditor
时,它可以被给予回调使用。
你甚至会为这个任务使用 DI 框架吗?该应用程序相对较大,我认为大约 800k loc,没有重用公司范围的库。另一种方法是在不使用 DI 框架的情况下对所有组件隐藏具体类,以避免引入新问题。对于使用我的新抽象的组件,这不应该有所作为,因为这些组件应该以不需要知道所使用的 DI 框架的方式编写,对吧?
我知道这很抽象,可能很难回答,但我希望其他人对这类任务有一些经验。我感谢任何指示。至于使用哪个 DI 框架的问题,我完全开放。