我们正在重构ASP.Net Web应用程序的整个代码库。几乎整个应用程序都使用来自c#代码的sql语句来查询数据库,并且类似的sql语句分散在整个代码库中。该应用程序使用的是Mimer数据库,它不是常用的数据库。
对于这样的应用程序,有什么可能是一个很好的重构计划,特别是对于数据访问层,以便删除重复的代码,确保DRY?
答案 0 :(得分:0)
在数据库实现上实现一个抽象层,以便您的应用程序调用{{1}}和GetUser()
而不是UpdateWidget()
和朋友之类的方法。
这些方法将存在于接口上,每个实体类型一个。
IDbCommand.ExecuteReader()
每个数据库平台的每个接口都应该有一个实现者。
IUserRepository
IWidgetRepository
然后创建一个工厂类,它为相关数据库平台提供所请求实体类型的正确实现类的实例。
工厂类应该在知道应用程序当前配置使用的数据库平台的情况下进行实例化。它应该使用这些信息来选择实例化哪个类并在被问到时返回。
MySqlUserRepository
MySqlWidgetRepository
MimerUserRepository
MimerWidgetRepository
保留对RepoFactory的单个实例的引用,以便您只需从配置中设置一次。
将所有特定于数据库平台的内容粘贴到实施者类中,完成工作。 (您已经编写了Mimer所需的所有查询 - 您只需将它们从您的应用程序移植到这个新数据层中。)