首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为鲜为人知的数据库设计数据访问层的ASP.Net

问为鲜为人知的数据库设计数据访问层的ASP.Net
EN

Stack Overflow用户
提问于 2012-12-21 00:04:29
回答 1查看 184关注 0票数 0

我们正在重构ASP.Net web应用程序的整个代码库。几乎整个应用程序都在使用c#代码中的SQL语句来查询数据库,类似的sql语句分散在整个代码库中。应用程序正在使用不是常用数据库的Mimer数据库。

对于这样的应用程序,有什么好的重构计划,特别是对于数据访问层,以便删除确保DRY的重复代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-21 00:21:34

在数据库实现之上实现一层抽象层,这样您的应用程序就可以调用GetUser()和UpdateWidget()等方法,而不是调用IDbCommand.ExecuteReader()和friends。

这些方法将存在于接口上,每个实体类型对应一个方法。

代码语言:javascript
复制
IUserRepository
IWidgetRepository

对于每个数据库平台,每个接口都应该有一个实现者。

代码语言:javascript
复制
MySqlUserRepository
MySqlWidgetRepository

MimerUserRepository
MimerWidgetRepository

然后创建一个工厂类,它为相关数据库平台提供所请求的实体类型的正确实现类的实例。

工厂类应该在了解应用程序当前配置为使用的数据库平台的情况下实例化。它应该使用此信息来选择实例化哪个类,并在请求时返回。

代码语言:javascript
复制
class RepoFactory
{
    string _platform;
    public RepoFactory(string platform) { this._platform = platform; }

    public IUserRepository GetUserRepository()
    {
        if (_platform == "mysql") return new MySqlUserRepository();
        if (_platform == "mimer") return new MimerUserRepository();
        throw new NotSupportedException(_platform);
    }

    public IWidgetRepository GetWidgetRepository() // ...
}

保留对RepoFactory单个实例的引用,这样您只需在配置中设置它一次。

将所有特定于数据库平台的东西放在实现器类中,完成工作。(您已经为Mimer编写了所有需要的查询-您只需要将它们从您的应用程序移植到这个新的数据层。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13976033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档