将BLL类标记为静态或?

Fer*_*Fer 6 static-methods data-access bll

我已经有了分层数据访问设计,效果很好.但我不知道它是否是最合适的实现.
我只是想知道BLL类或methots应该是静态的还是应该是只有一个实例的concreate类?
与此同时,我不需要序列化BLL类以在这样的SOA设计中使用它.但我不知道这个功能会带来什么.
请查看以下选项:

  1. BLL课程和methots是静态的
  2. BLL类不是静态的,但它的methots是静态的
  3. BLL类不是静态的,也不是它的methots.应用程序应每次创建BLL类以访问其methots.
  4. BLL类不是静态的,也不是它的methots.但是每个BLL类只有一个实例.应用程序使用这些静态实例以便使用BLL methots.

哪一个最有效率的表现和设计?

编辑:

选项1

public static class BllCustomer
{
    public static List<ModelCustomer> GetCustomers()
    {

    }
}

// usage
BllCustomer.GetCustomers();
Run Code Online (Sandbox Code Playgroud)

选项2

public class BllCustomer
{
    public static List<ModelCustomer> GetCustomers()
    {

    }
}

// usage
BllCustomer.GetCustomers();
Run Code Online (Sandbox Code Playgroud)

2选项

public class BllCustomer
{
    public List<ModelCustomer> GetCustomers()
    {

    }
}

// usage
BllCustomer bllCustomer = new BllCustomer();
bllCustomer.GetCustomers();
Run Code Online (Sandbox Code Playgroud)

3选项

public class BllCustomer
{
    public List<ModelCustomer> GetCustomer()
    {

    }
}

// usage
public static BllCustomer s_BllCustomer = new BllCustomer();
// whenever needed
s_BllCustomer.GetCustomer();
Run Code Online (Sandbox Code Playgroud)

Kan*_*ane 1

序列化您的 Domain / BusinessLogicLayer 类听起来有点不寻常,因为您的 Domain 层通常包含业务规则和复杂的处理逻辑。通常,您需要序列化 ​​DataTransformation / POCO 类。

静态或具体类/方法之间会有细微的performance差异。我会回避主要业务逻辑的静态类和方法,因为它们可能很难模拟/单元测试,而且不能与 IoC 容器一起使用。因此,考虑到这一点,我会推荐选项 3,正如您所解释的那样。这里还发布了一些非常有用的答案。