我试图通过引用FileInfo和DirectoryInfo密封类来实现一些行为。
FileInfo只有一个构造函数。它需要文件名或路径。
FileInfo fileInfoOne = new FileInfo("Sample.txt");
FileInfo fileInfoTwo = new FileInfo(@"C:\Test\Sample.txt");
DirectoryInfo只有一个构造函数,它需要路径。
DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Test\");
FileInfo和DirectoryInfo构造函数看起来像
public FileInfo(string fileName);
public DirectoryInfo(string path);
这里,DirectoryInfo接受路径为字符串,这是有道理的。但是,FileInfo接受fileName作为字符串,我们可以传递名称或路径,这对我来说有点奇怪。
我只想更改构造函数,如下所示。
public FileInfo(string fileNameOrPath);
我是否违反任何设计规则(命名转换的观点)?
注意:我引用FileInfo和DirectoryInfo仅供参考。我的问题很相似,但并不完全相同。
更新
基本上我们正在实现TextFileInfo,PdfFileInfo,DocFileInfo等。这些文件类型中的每一种在公共属性之上都有自己的属性(基于客户端要求,如DocFileInfo的“TextLanguage”)。公共属性希望保留在基本MasterFileInfo类中,类似于FileInfo。
任何最终建议?
答案 0 :(得分:1)
路径和文件名是操作系统概念,当您说my.txt
时,它表示当前文件夹中名称为D:\data\temp\my.txt
的文件,文件句柄将指向D:\data\temp\
之类的地方..\..\my.txt
是当前文件夹。您还可以将my.txt
作为构造函数的路径,这意味着从当前目录转到2目录并查找名为D:\my.txt
的文件,如果当前目录,它将转换为D:\data\temp\
是FileInfo fileInfoOne = new FileInfo("Sample.txt");
FileInfo fileInfoTwo = new FileInfo(@"C:\Test\Sample.txt");
。
同时注意两者
End If
答案 1 :(得分:0)
虽然我不同意你的陈述FileInfo
构造函数参数名称/描述没有意义,但根据评论听起来你可以这样做:
public class FileInfoPassthrough // Could this be considered a facade?
{
/// <summary>
/// A much more descriptive parameter name for the FileInfo constructor
/// </summary>
/// <param name="fileNameOrPath">Either the filename at the relative path of execution, or the full filename and path.</param>
public FileInfo GetFileInfo(string fileNameOrPath)
{
return new FileInfo(fileNameOrPath);
}
}
这将允许您有一个“更具描述性”的参数名称,只需新闻FileInfo
并返回它。您可以使用此方法代替在各个地方新建FileInfo
。
通过这个类对FileInfo
对象的新增,从消费者中抽象出FileInfo
中构造函数的“坏名称/描述”(假设他们使用的是这种方法而不是{{1}直接)。