【问题标题】:Is a base class with shared fields and functions good design是具有共享字段和功能的基类良好的设计
【发布时间】:2011-02-11 06:32:50
【问题描述】:

我有一个带有共享字段和函数的 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 函数完成。

有没有更好的设计让你的 DAL 中有 Shared 函数并且仍然有基类函数?或者,既然我有一个基类,那么在 DAL 中转向实例方法会更好吗?

【问题讨论】:

    标签: vb.net data-access-layer shared daab base-class


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多