2012-01-05 60 views
6

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

  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(); 

选项2

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

    } 
} 

// usage 
BllCustomer.GetCustomers(); 

2选项

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

    } 
} 

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

3选项

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

    } 
} 

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

为什么人们坚持不给这个问题的意见,我简直无法理解。可能他们在许多其他问题上看不到这个话题。是的,我在跟自己说话。 – Fer 2012-01-19 13:20:25

回答

1

序列化你的域/ BusinessLogicLayer类听起来有点不寻常,因为您的域层通常持有你的业务规则和复杂的处理逻辑。通常你会想要序列化你的DataTransformation/POCO类。

静态或具体的类/方法之间会有差异。我会回避你的主要业务逻辑的静态类和方法,因为它们很难模拟/单元测试,另外也不适用于IoC容器。所以考虑到这一点,我会建议选项3,正如你已经解释过的那样。还有一些非常有用的答案here

+0

感谢您的意见。你对备选方案4有何看法? – Fer 2012-01-06 14:03:45

+0

在阅读这个问题时,我首先想到的就是嘲笑的问题。 Upvoted为和有关IoC容器的信息 – Mike 2012-01-24 22:16:56

0

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

但是,我将此与ASP.NET结合使用。

+0

你说你会选择选项2.你怎么看待选项1和选项2之间的区别?它们都易于使用和静态。为什么不选择选项1呢? – Fer 2012-01-26 11:59:43

+0

我不使用选项1,因为它太僵硬。使用静态类时,所有成员都必须是静态的。拥有静态成员的非静态类比静态类更典型。您仍然可以使用选项2创建一个实例,但是您会遇到带有选项1的静态类。请使用最简单的方法。另外,选项1/2对于单元测试并不理想,但如果在这些方法中没有太多的话,那么单元测试并不是必需的。我的大部分逻辑都在存储过程中,取决于。 – 2012-01-26 14:11:20

0

我亲自构建了使用大量这些技术的系统。最后,我应该意识到我太聪明了,因为最简单的技术实际上是最灵活的。如果你试图让事物变成静态的,因为它感觉工作量少,因此“效率更高”,那么你出于错误的原因去做。

我建议不要让这个类或方法静态化。原因是我已经开始寻找诸如DDD和依赖注入(IoC)这样的模式,这非常有价值。例如,你将如何测试一些使用BLL的网站或应用程序代码?通常你会想'嘲笑'你的BLL,所以它返回可预测的结果。你将很难用静态类来做这件事。