Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单一责任原则用法如何正确调用子方法?_C#_.net_Visual Studio_Oop_Design Patterns - Fatal编程技术网

C# 单一责任原则用法如何正确调用子方法?

C# 单一责任原则用法如何正确调用子方法?,c#,.net,visual-studio,oop,design-patterns,C#,.net,Visual Studio,Oop,Design Patterns,我努力学习扎实的职业技能。我写了两种类型的代码风格。哪个是: 1) 单一责任原则\u 2.cs:如果您查看主程序,则所有实例都是从接口生成的 1) 单一责任原则(Single Responsibility Principle_3.cs):如果您查看主程序,所有实例都是从普通类生成的 我的问题:哪一个是正确的用法?我更喜欢哪一个 namespace Single_Responsibility_Principle_2 { class Program { static

我努力学习扎实的职业技能。我写了两种类型的代码风格。哪个是:
1) 单一责任原则\u 2.cs:如果您查看主程序,则所有实例都是从接口生成的
1) 单一责任原则(Single Responsibility Principle_3.cs):如果您查看主程序,所有实例都是从普通类生成的
我的问题:哪一个是正确的用法?我更喜欢哪一个

namespace Single_Responsibility_Principle_2
{
    class Program
    {
        static void Main(string[] args)
        {
            IReportManager raporcu = new ReportManager();
             IReport wordraporu = new WordRaporu();

             raporcu.RaporHazırla(wordraporu, "data");
            Console.ReadKey();
        }
    }

    interface IReportManager
    {
        void RaporHazırla(IReport rapor, string bilgi);
    }

    class ReportManager : IReportManager
    {
        public void RaporHazırla(IReport rapor, string bilgi)
        {
            rapor.RaporYarat(bilgi);
        }
   }


    interface IReport
    {
        void RaporYarat(string bilgi);
    }

    class WordRaporu : IReport
    {
        public void RaporYarat(string bilgi)
        {
            Console.WriteLine("Word Raporu yaratıldı:{0}",bilgi);
        }

    }

    class ExcellRaporu : IReport
    {
        public void  RaporYarat(string bilgi)
        {
          Console.WriteLine("Excell raporu yaratıldı:{0}",bilgi);
        }
}

    class PdfRaporu : IReport
    {
       public void  RaporYarat(string bilgi)
       {
         Console.WriteLine("pdf raporu yaratıldı:{0}",bilgi);
       }
}
}
第二个0从普通类中删除的所有实例


您的示例与SRP无关。它涉及到另一个OO原则,即“程序到接口”。我建议进行第一次实施

SRP说,这个类应该只有一个改变的理由。在本例中,您有两个不同的对象,ReportManager和Report。因此,根据SRP,ReportManager应仅负责管理报告实例,而Report应负责报告目的。ReportManager可以进行扩展,以包含有关各种类型的报表实现的信息,这些信息可以作为配置提供,有时还可能负责创建实例。

还有“Liskov替换原则”,接近“程序到接口”。
namespace Single_Responsibility_Principle_3
{
    class Program
    {
        static void Main(string[] args)
        {
            WordRaporu word = new WordRaporu();
            ReportManager manager = new ReportManager();
            manager.RaporHazırla(word,"test");
        }
    }
      interface IReportManager
    {
        void RaporHazırla(IReport rapor, string bilgi);
    }

    class ReportManager : IReportManager
    {
        public void RaporHazırla(IReport rapor, string bilgi)
        {
            rapor.RaporYarat(bilgi);
        }
   }


    interface IReport
    {
        void RaporYarat(string bilgi);
    }

    class WordRaporu : IReport
    {
        public void RaporYarat(string bilgi)
        {
            Console.WriteLine("Word Raporu yaratıldı:{0}",bilgi);
        }

    }

    class ExcellRaporu : IReport
    {
        public void  RaporYarat(string bilgi)
        {
          Console.WriteLine("Excell raporu yaratıldı:{0}",bilgi);
        }
}

    class PdfRaporu : IReport
    {
       public void  RaporYarat(string bilgi)
       {
         Console.WriteLine("pdf raporu yaratıldı:{0}",bilgi);
       }
}
}