设计一些继承的SQL类?

时间:2013-09-04 17:59:47

标签: c# sql inheritance

我已经在C#中编程了一段时间,但我从未擅长设计模式或应用OOP,我现在正试图改变。

我遇到的问题是我将所有SQL语句都放在一个名为“SQLConn”的类中,但现在我不想把它拆分成子类。

在我的应用程序中有一个数据库,其中两个表为“Rules”和“Log”。

我的想法是为每个表(我在我的应用程序中使用)创建一个子类,并将所有方法移动到该类并打开一个新连接。

因此,如果我有一个名为SQLLog的子类和SQLRules是SQLConn的子类,那么当用户在应用程序中插入新规则时,它会创建一个新的SQLConn.SQLRules实例并运行“InsertRule”。 ()“它还创建了一个新的SQLConn.SQLLog实例并运行”InsertLog(“用户插入规则X”)?

根据这篇文章Is it better to execute many sql commands with one connection, or reconnect everytime?,将激活连接池,因此不会有太大的性能差异。

所以,总结一下这个问题: 设计SQL类是否很好: *父类:SQLConn - 包含conncetion信息 *子类:SQLLog - 包含“InsertLog()”方法 *子类:SQLRules - 包含“InsertRule()”方法

如果我需要在我的应用程序的一部分中同时使用SQLRules和SQLLog,我应该创建两个实例,一个是SQLLog,另一个是SQLRule,并分别调用它们的方法?这是一个很好的设计吗?

祝你好运, 托马斯

1 个答案:

答案 0 :(得分:1)

如果您有两个具有自己连接的单独类,则在使用具有相同连接字符串的相应SQL Server版本时,连接应该合并。

就设计而言,分离数据库和应用程序代码是一种好习惯。也就是说,在SQL数据库中将您的SQL代码作为存储过程(除非它是动态SQL或LINQ-SQL或类似的东西)。关于存储过程的使用存在一些争论,但我认为这适合您的情况。

然后,您可以使用在C#代码中调用这些sproc的方法,而无需在代码中将SQL代码作为字符串。这通常更容易维护,因为您可以使用SSMS中的SQL代码而不是Visual Studio。

如果不这样做,至少将你的SQL代码放在项目中自己的脚本文件中。

这听起来不是一个坏主意,根据Demeter法则分割功能是使项目更易于测试和维护的好方法。