替代引用父类

时间:2017-07-24 10:39:12

标签: c# .net

我正在创建一个inf文件解析器(Windows驱动程序,理论上类似于infs,实际上完全不同)。

我有一个父InfFile类,其中包含SectionsKeys形式的结构化但未解析的数据(我将其称为未解析的,因为它未被转换为比SectionsKeys更有用的东西,与之后的其他数据相反,但也可以访问一些已分析的数据,例如SupportedOperatingSystems,{{1 },Folders等。

我遇到的问题是,在Folder.Files文件中可以引用4种infFoldersdefaultX86和{ {1}}。因此,尝试将所有与文件夹相关的代码转移到Ia64类,并使用属性Amd64InfFoldersDefault和{{1} (我不能简单地合并它们)。

但是,为了找出其中引用了哪些文件夹,我需要访问X86类的Ia64Amd64属性。这意味着:

  • 我的Sections类包含对其父级的引用(我认为这可能不是最佳解决方案),
  • Keys首先解析数据,然后将其作为构造函数的一部分传递给InfFile,但这意味着所有InfFolders逻辑现在都存在于InfFile中再次上课,
  • 我将所需的InfFoldersFolder传递给InfFile作为构造函数的一部分,并具有将它们排序为可用对象的逻辑。

这样做的最佳方式是什么?在这种情况下最佳做法是什么?

Sections类的概念是这样的:

Keys

正如您在方法InfFolders中所看到的,有两个地方需要对父项的引用。

可以将所有代码转移到InfFolders并完全删除public class InfFolders { public IReadOnlyCollection<InfSourceFolder> Default() { return GetFolders("SourceDiskNames").ToList().AsReadOnly(); } public IReadOnlyCollection<InfSourceFolder> X86() { return GetFolders("SourceDiskNames.X86").ToList().AsReadOnly(); } public IReadOnlyCollection<InfSourceFolder> Ia64() { return GetFolders("SourceDisksNames.Ia64").ToList().AsReadOnly(); } public IReadOnlyCollection<InfSourceFolder> Amd64() { return GetFolders("SourceDisksNames.Amd64").ToList().AsReadOnly(); } private IEnumerable<InfSourceFolder> GetFolders(string sectionName) { return <InfFile reference>[sectionName]?.Keys?.Select( x => new InfSourceFolder(Convert.ToInt32(x.Name), new FileInfo(<InfFile reference>.FilePath).DirectoryName + x.Values.ElementAtOrDefault(3))); } } 类,但不要认为这也是一个非常好的模型。我看到它的方式是有4个属性都与同一个东西有关,所以它们应该组合在一起。

0 个答案:

没有答案