Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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#_Design Patterns_Domain Driven Design - Fatal编程技术网

C# 对以文件名为参数的方法的测试和正确放置感到困惑

C# 对以文件名为参数的方法的测试和正确放置感到困惑,c#,design-patterns,domain-driven-design,C#,Design Patterns,Domain Driven Design,我有一段代码,它使用.mp3文件的文件路径生成一个类Id3v1Tag。我在一个WPF MVVM应用程序中使用它,和其他许多应用程序一样,我一直痴迷于以“正确”的方式设计我的应用程序,所以我试图找出将代码放在哪里。最初它位于Id3v1Tag(继承的代码库)的构造函数中,但我将其取出并放入一个名为Id3v1TagService的类中。但是测试呢?由于它以文件名作为参数,它现在是否依赖于文件服务?您需要将文件的加载与服务中的其他逻辑分离开来。源可能存在于由文件名标识的磁盘上,这一事实与Id3v1Tag

我有一段代码,它使用.mp3文件的文件路径生成一个类Id3v1Tag。我在一个WPF MVVM应用程序中使用它,和其他许多应用程序一样,我一直痴迷于以“正确”的方式设计我的应用程序,所以我试图找出将代码放在哪里。最初它位于Id3v1Tag(继承的代码库)的构造函数中,但我将其取出并放入一个名为Id3v1TagService的类中。但是测试呢?由于它以文件名作为参数,它现在是否依赖于文件服务?

您需要将文件的加载与服务中的其他逻辑分离开来。源可能存在于由文件名标识的磁盘上,这一事实与Id3v1TagService无关。相反,它会传递一条小溪。打开/关闭文件的逻辑属于另一个类

这是一个更好的设计,因为:-

  • 关注点是分开的
  • 您可以测试Id3v1TagService,而无需安装文件系统
  • Id3v1TagService现在可以用于通过https、数据库等到达的数据

您仍然需要测试打开/读取/关闭文件的类。这不可避免地会影响到文件系统(因为这就是重点)。如果这是一个琐碎的问题,没有单元测试,您可以将其留给集成测试。

您希望传入您的文件访问对象,不管它是什么(这是依赖项注入的一部分),因为这样您就可以模拟它,只测试您尝试测试的类的功能

存储库类、服务或执行文件访问的任何内容都应该使用其中的文件路径