数据访问层中的静态方法

Posted

技术标签:

【中文标题】数据访问层中的静态方法【英文标题】:Static method in Data Access Layer 【发布时间】:2011-08-02 14:13:46 【问题描述】:

我在数据访问层 (DAL) 中使用了很多静态方法,例如:

public static DataTable GetClientNames()

    return CommonDAL.GetDataTable("....");

但我发现有些开发人员不喜欢 DAL 中的静态方法的想法。我只是需要一些理由在 DAL 中使用或不使用静态方法。

谢谢

托尼

【问题讨论】:

【参考方案1】:

从纯粹主义者的角度来看,这违反了各种最佳实践(例如,对实现的依赖、紧密耦合、不透明的依赖等)。我自己会这么说,但最近我倾向于转向更简单的解决方案,而不是过多地研究“企业”功能和流行语。因此,如果您愿意编写这样的代码,如果这种架构允许快速开发并且可测试,并且最重要的是,它可以解决您的业务问题,那就没问题了。

【讨论】:

我在另一个项目中又发现了同样的问题。我认为静态 DAL 与 OOP 基本思想背道而驰,而且扩展性不好。我也认为添加IOC容器可以避免这种静态DAL。【参考方案2】:

如果我不得不选择一个不使用静态方法的原因,那就是它限制了您针对您的代码编写单元测试的能力。例如,为您的 DAL 创建模拟将更加困难,因为没有实际的代码接口,只有一堆静态方法。如果/当您决定采用需要接口来支持 IoC、依赖注入等内容的框架时,这会进一步限制您。

【讨论】:

这也是一个很好的观点,我今天刚刚在 IOC 上发现了这个问题。【参考方案3】:

那是Unit of Work,只是静态的,不是吗?

【讨论】:

我们需要从数据库中读取客户名称,你可以说它是静态的。但即使是实例调用也会以 CLR 的静态调用告终。不确定何时使用静态调用以及何时使用实例调用。 @Tony:你的数据源是什么?奥姆?还有什么? 数据保存在 SQL server 和绑定使用的数据表中。没有使用 ORM。

以上是关于数据访问层中的静态方法的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 静态方法不能访问直接

访问静态成员函数中的非静态成员的解决方法

java中的内部类

类中静态方法

statuc和const

类静态方法访问它的静态数据成员