Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Oop 这个班级违反单一责任吗_Oop_Single Responsibility Principle - Fatal编程技术网

Oop 这个班级违反单一责任吗

Oop 这个班级违反单一责任吗,oop,single-responsibility-principle,Oop,Single Responsibility Principle,我想要实现的功能是从数据库中检索一些数据,并根据一些参数从数据中创建一个文本文件。我创建了一个FileProcessor类来实现这一点 public class FileGenerator { public FileGenerator(IDataProvider dataProvider) { // some constructor logic } public void Generate(string fileType) { var data = dataProvider.getDa

我想要实现的功能是从数据库中检索一些数据,并根据一些参数从数据中创建一个文本文件。我创建了一个FileProcessor类来实现这一点

public class FileGenerator
{
public FileGenerator(IDataProvider dataProvider)
{
  // some constructor logic 
}
public void Generate(string fileType)
{
  var data = dataProvider.getData()
  Logger.LogMessage("Retrieved data");
  var file = FileFactory.GetFileInstance(fileType).CreateFile()
  Logger.LogMessage("File Created");
}
}
在上面的代码片段中,构造函数从客户机接收dataProvider。 FileFactory创建文件类型的实例,实例中的Create方法实际生成文件。Logger组件处理所有日志机制,并可配置是否写入磁盘或数据库等


这个类FileGenerator违反了SRP吗?

我个人会使用generateString fileType(数据数据,其中数据是一个单独的占位符类)将数据提供程序与FileGenerator完全分离,这样,如果您选择的话,您就可以向其中添加好的函数,比如toLowerCase或toString或任何您真正能想到的函数

相反,您需要一个管理类来调用DataProvider,获取数据,将其放入他们都可以使用的类中,然后将其传递到FileGenerator。如果FileGenerator不一定要知道数据提供程序,那么它不应该知道。假设您创建了一个不同的数据提供者。您将如何重用FileGenerator。你不能。您必须编写不同的FileGenerator,以便它可以在新的数据提供程序上调用FileGenerator不知道的特定方法,因为它获得了一个数据提供程序。这不是一个灵活和可维护的设计

至于日志记录,也可以由在成功方法返回时记录事件的管理器来处理。这样,当您将FileGenerator换成其他类型的FileGenerator时,就不必重写所有日志消息

我还将为您的filegenerator可以生成的文件类型使用枚举。它更易于维护,并且更清楚地显示可以生成哪些文件


我希望这有帮助,如果没有,请务必要求澄清。我强烈建议您阅读Head-First设计模式,以获得许多常见编程问题的标准解决方案。

您认为它违反了什么以及如何违反?“请说明你们的观点,否则这个问题看起来太宽泛了。”佩特拉杜林-除了生成文件、获取数据和记录消息之外。这些可以被视为额外的责任吗?这门课依赖于太多的其他课程吗?谢谢你提供的详细信息。我喜欢直接将数据传递给FileGenerator类的方法,因为FileGenerator需要数据,而不是如何向其提供数据。关于DifferentitDataProvider,如果它可以是IDataProvider的实现,我认为应该可以。关于文件类型,我将其作为enum,对于示例,我在这里没有提到所有这些细节。