我已经在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,并分别调用它们的方法?这是一个很好的设计吗?
祝你好运, 托马斯
答案 0 :(得分:1)
如果您有两个具有自己连接的单独类,则在使用具有相同连接字符串的相应SQL Server版本时,连接应该合并。
就设计而言,分离数据库和应用程序代码是一种好习惯。也就是说,在SQL数据库中将您的SQL代码作为存储过程(除非它是动态SQL或LINQ-SQL或类似的东西)。关于存储过程的使用存在一些争论,但我认为这适合您的情况。
然后,您可以使用在C#代码中调用这些sproc的方法,而无需在代码中将SQL代码作为字符串。这通常更容易维护,因为您可以使用SSMS中的SQL代码而不是Visual Studio。
如果不这样做,至少将你的SQL代码放在项目中自己的脚本文件中。
这听起来不是一个坏主意,根据Demeter法则分割功能是使项目更易于测试和维护的好方法。