0

我有一个带有共享字段和函数的 BaseDataClass

    Protected Shared dbase as SqlDatabase
    Protected Shared dbCommand as DBCommand
    ...
    //also have a sync object used by the derived classes for Synclock'ing
    Protected Shared ReadOnly syncObj As Object = New Object()

    Protected Shared Sub Init() //initializes fields, sets connections 
    Protected Shared Sub CleanAll() //closes connections, disposes, etc.

我有几个派生自这个基类的类。派生类具有Shared可以直接从 BLL 调用而无需实例化的所有函数。
这些派生类中的函数调用基类 Init(),调用它们特定的存储过程,调用基类 CleanAll(),然后返回结果。

因此,如果我有 5 个派生类,每个派生类有 10 个函数,总共有 50 个可能的函数调用,因为它们都是Shared,CLR 一次只调用一个,对吗?所有调用都排队等待,直到每个Shared函数完成。

是否有更好的设计, Shared在 DAL 中具有功能并且仍然具有基类功能?或者因为我有一个基类,是否最好转向 DAL 中的实例方法?

4

1 回答 1

0

在这种特殊情况下,我会说不。这不是一个好的设计。为了让它正常工作,每个类上的每个方法调用首先必须获得一个锁,syncObj以免由于多个线程竞争同一资源而破坏状态。忽略可能因此而产生的潜在性能影响,您将无法让您的派生类独立工作,因为它们都使用相同的“东西”。

在这种情况下,我绝对推荐使用实例方法。如果您仍然希望您的个人类使用相同的SqlConnection或其他的,则使用依赖注入将其传递给类。

于 2010-04-23T19:26:27.833 回答