6

我已经有了一个运行良好的分层数据访问设计。但我不知道这是否是最合适的实现。
我只是想知道 BLL 类或方法应该是静态的,或者它们应该是只有一个实例的 concreate 类?
同时,我不需要序列化 ​​BLL 类来在这样的 SOA 设计中使用它。但我不知道该功能会带来什么。
查看以下选项:

  1. BLL 类和方法是静态的
  2. BLL 类不是静态的,但它的方法是静态的
  3. BLL 类不是静态的,也不是它的方法。应用程序应该每次都创建 BLL 类以便访问它的方法。
  4. BLL 类不是静态的,也不是它的方法。但是每个 BLL 类只有一个实例。并且应用程序使用这些静态实例来使用 BLL 方法。

哪一个在性能和设计方面最有效?

编辑:

选项1

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

    }
}

// usage
BllCustomer.GetCustomers();

选项2

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

    }
}

// usage
BllCustomer.GetCustomers();

选项3

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

    }
}

// usage
BllCustomer bllCustomer = new BllCustomer();
bllCustomer.GetCustomers();

选项4

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

    }
}

// usage
public static BllCustomer s_BllCustomer = new BllCustomer();
// whenever needed
s_BllCustomer.GetCustomer();
4

3 回答 3

1

Serializing your Domain / BusinessLogicLayer classes sounds a bit unusual as your Domain layer typically holds you business rules and complex processing logic. Typically you will want to serialize your DataTransformation / POCO classes.

There will be marginal performance differences between static or concrete classes / methods. I would shy away from static classes and methods for you main business logic as they can be difficult to mock / unit test, plus don't work with IoC containers. So with this in mind I would recommend option 3 as you've explained it. There is also some extremely useful answers posted here.

于 2012-01-06T11:57:56.700 回答
0

我个人使用很多这些技术构建了系统。最后我应该意识到我太聪明了,因为最简单的技术实际上是最灵活的。如果您因为感觉工作量减少而“更高效”而想将事情设为静态,那么您这样做是出于错误的原因。

我建议不要将类或方法设为静态。原因是我发现 DDD 和依赖注入 (IoC) 等模式非常有价值。例如,您将如何测试一些使用此 BLL 的网站或应用程序代码?通常,您会想要“模拟”您的 BLL,以便它返回可预测的结果。使用静态类将很难做到这一点。

于 2012-01-25T04:45:39.537 回答
0

为了性能和易用性,选项二最有意义。我现在正在使用选项 2,并且没有遇到任何问题。它们中的大多数只包含一个调用 DAL 的行,然后是另一个使用 log4net 记录的行。它们中的大多数都没有很多业务逻辑。

但是,我将它与 ASP.NET 一起使用。

于 2012-01-24T16:33:15.433 回答