我尝试学习SOLID易思考。我写了两种代码风格。哪一个是:
1)单一责任原则_2.cs:如果你看主程序从界面
生成的所有实例
1)单一责任原则_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);
}
}
}
第二个所有实例都来自正常班级
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);
}
}
}
答案 0 :(得分:4)
您的示例与SRP无关。它涉及“程序到接口”的另一个OO原则。我建议先进行实施。
SRP说,班级应该只有一个改变的理由。在您的情况下,您有两个不同的对象,ReportManager和Report。因此,根据SRP,ReportManager应仅负责管理报告实例,报告应负责报告目的。 ReportManager可以扩展以包含有关作为配置可用的各种类型的报告实现的信息,并且可能还负责在某个时间创建实例。