C# 以下场景中要遵循的设计模式

C# 以下场景中要遵循的设计模式,c#,.net,oop,design-patterns,dependency-injection,C#,.net,Oop,Design Patterns,Dependency Injection,我有三种不同类型的设置(每个设置对应一个类)。考虑一下,我们知道必须遵循的设置(比如说< 1, 2和3 < /强>)。现在,每个设置都需要不同的设置 假设我们有设置B、设置C、设置D,这是除设置A之外的所有三种设置所共有的设置。所以,我所做的是,我为所有设置类型(a、B和C)提供了一个通用的界面设置 对于每个设置类型,只有此方法将公开,以便为每个设置配置 在设置A中,我们有子设置(子设置SAA、子设置SAB、子设置SAC)。 为此,我有一个用于设置A的抽象类,它由SubsetingAA,Sub

我有三种不同类型的设置(每个设置对应一个类)。考虑一下,我们知道必须遵循的设置(比如说< <强> 1, 2和3 < /强>)。现在,每个设置都需要不同的设置

  • 假设我们有设置B、设置C、设置D,这是除设置A之外的所有三种设置所共有的设置。所以,我所做的是,我为所有设置类型(a、B和C)提供了一个通用的界面设置

    对于每个设置类型,只有此方法将公开,以便为每个设置配置

  • 在设置A中,我们有子设置(子设置SAA、子设置SAB、子设置SAC)。
    为此,我有一个用于设置A的抽象类,它由SubsetingAA,SubsetingAB,SubsetingAC继承

    abstract class SettingA : IConfigureSettings
    {
      List<SettingA> _subSettings;
      public void ConfigureSettings()
      {
            //Should Perform configuration for the given site. This is what I need.
      }
    } 
    
  • 现在,对于Setup1,只有ConfigurationA()可见,而对于setup2和setup3,所有内容都要配置。要为所有三种设置配置SubSettingAC中的配置()

    这就是我所拥有的。现在,我只想调用ConfigureSettings()进行设置,它应该根据设置类型配置所有内容。考虑,安装类型是可用的。 不是程序设计的灵丹妙药。它们不能取代传统的 面向对象的分析技术,如CRC卡或用例 建模。要使用架构类比,可以通过分析确定 你的房子需要200安培的电。模式让你 确定如何安装配线。模式确实帮助你思考 关于设计系统时可能遇到的问题。 因此,基于模式的通用解决方案通常比 由一个人设计的解决特定问题的方案。 给定常用设计模式的数量(以及许多 (几乎每天都有更多的发明和发现)有时是可以的 很难选择适合您需要的图案。你要做的第一件事 应该决定的是这个问题是否从根本上是创造性的, 结构上的,或行为上的。当然,有些问题有以下几个方面: 两个甚至三个,并且可能需要您混合和匹配模式


    尽管如此,我认为你问题的第一部分似乎是创造性的,而构建者模式似乎是最匹配的。我将使用组合(通过接口)根据子设置设置配置。此外,配置A类和子设置SAC类似乎是配置类和子设置类的基类。

    稍微修改了这个问题。为子设置添加了更多场景。很抱歉给您带来不便。我认为我们没有足够的信息来提供设计建议。如果不了解这些类的更多信息,我们就不知道多态性或泛型在多大程度上是合适的,或者什么支持模式可能是有用的。还有大量的信息,我们很难处理。我理解这是问题本质的一部分,但您最好尝试确定一些更具体的问题,并将重点放在这些问题上,再加上一些最小的代码(甚至只是接口规范),这样更好吗?如果你对此有任何疑问,请告诉我。如果需要更改现有的类结构或任何其他内容,请告诉我。我需要知道我应该在ConfigureSettings()中做些什么来设置A以实现上述场景。是的,更好!有一件事,您想用第三个代码段表明什么?是,例如,
    ConfigurationB()类<代码>子设置SAA < /代码>?是的,考虑配置B()是类子设置SAA中的一种方法。对不起,功能不合适names@demoncodemonkey我认为评论比编辑更能与海报沟通。但是,我同意您在编辑说明中留下的评论。我添加了对该页面的引用,在该页面中可以找到该文本。(我在谷歌上搜索了一下,找到了两个地方,第二个是我链接的地方)谢谢编辑。我在报价的开头添加了一个超链接。我想这更明显。你是对的,我现在明白了。很高兴我找到了正确的来源:-)是的,我认为在引用之前或之后明确提及来源是引用文本的正确方式。
    
    abstract class SettingA : IConfigureSettings
    {
      List<SettingA> _subSettings;
      public void ConfigureSettings()
      {
            //Should Perform configuration for the given site. This is what I need.
      }
    } 
    
    class SubSettingsAA :  SettingA
    {
      ConfigurationB();
    }
    
    class SubSettingsAB :  SettingA
    {
      ConfigurationA();
      ConfigurationB();
    }
    
    class SubSettingAC : SettingA
    {
      ConfigurationC();
      ConfigurationD();
    }