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