【问题标题】:Buisness layer helper objects业务层帮助对象
【发布时间】:2015-03-29 13:30:11
【问题描述】:

我的 BL 中有多个类使用多个对象。

我正在努力了解应该如何实例化这些对象以及将它们存储在哪里。

我不想从服务层传递它们。 我的想法是在 BL 中创建一个单例类,所有其他人都会使用它。 这是一个合理的解决方案吗?我知道很多人认为单例是一种反模式。

谢谢

【问题讨论】:

    标签: .net architecture business-logic


    【解决方案1】:

    不要使用单例或静态。它可以防止您的类依赖注入和不灵活。即:您不能根据组件更改类行为。

    最好是使用构造函数注入:

    public class Usage{
        public Usage(Component1 comp1, Component2 comp2){ /*param assignment*/ }
        private Component1 comp1;
        private Component2 comp2;
    
        //using comp1 and comp2
    }
    

    或者如果你认为对象组合很麻烦,你可以使用默认的对象创建,这是.Net常用的。

    public class Usage{
        public Component1 Comp1 = new Component1();
        public Component2 Comp2 = new Component2();
    
        //using Comp1 and Comp2
    }
    

    好处是,您可以将Components 更改为inheritance,或者您可以使用接口作为声明,以获得更好的灵活性。

    【讨论】:

    • 完全同意。不要使用静态类。针对接口注入实例和程序。
    • 谢谢。但是我应该如何在 BL 中的所有不同类之间共享使用类呢?
    • 如前所述,将它们注入需要它们的组件中。
    • 我会尝试更好地解释自己:我至少有 5 个不同的使用类和超过 5 个我不想在每个组件中初始化的组件。组件是内部的,因此我不能真正将它们作为 Ctor 参数传递,因为 BL 类是从服务层创建的。我只是看不出注射对我来说是一种解决方案。
    • @RotemB 老实说,您的架构比您在问题中描述的架构更复杂。除非您可以更好地描述您的问题(代码示例等),否则没有多少可以帮助您
    【解决方案2】:

    恕我直言,我们有处理跨业务层/服务的一些共享功能的静态类。这不应该是一个问题。

    您必须划定这些类的正确用途并加以利用。如果您可以提供一些用例或发现静态/单例最适合您的用例,则可以与之保持一致

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2013-06-20
      • 2011-04-12
      • 2014-09-04
      • 1970-01-01
      • 2012-09-13
      • 2010-11-01
      相关资源
      最近更新 更多