gpt4 book ai didi

c# - 用于在平面文件中对字段进行分组和结构化数据的设计模式

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:04 24 4
gpt4 key购买 nike

我正在使用 FileHelpers C# 库将文件读入将要处理的自定义对象数组中。例如,部分文件定义:

[FixedLengthRecord]
public class Row
{
[FieldFixedLength(9)]
[FieldTrim(TrimMode.Right)]
public string Ssn;

[FieldFixedLength(15)]
[FieldTrim(TrimMode.Right)]
public string LastName;

...
}

我在执行此操作时试图遵守 OOP 原则,并且我注意到某些字段具有自然分组(例如 SSNClientID EmployerIDEmployerName 等),因此我尝试将它们分解为单独的类(例如 ClientEmployer)。但这似乎有问题,因为某些字段需要跨对象共享(例如,ClientID 需要知道关联的 EmployerID)。

为了使事情更加复杂,我想将具有 [FieldNotInFile] 属性的字段添加到类定义中,因为在处理过程中,我的应用程序将查询与特定行匹配的数据库记录字段并填充行各自的 [FieldNotInFile](例如,根据 SSN 从数据库中获取客户端的 FName,因为它不在文件中)。

您将如何构建它?我有点只想将整个文件行保留为一个类,但它接近 75 个字段,这看起来很荒谬。想法?

最佳答案

FileHelpers 类只是一种使用 C# 语法定义平面文件规范的方法。

因此,FileHelpers 类是一种不常见的 C# 类,您应该尝试使用公认的 OOP 原则。 (FileHelpers 类在很多方面违反了 OOP 原则,最明显的是它要求您使用公共(public)字段而不是属性)。 FileHelpers 不应具有超出 FileHelpers 库使用的属性或方法。

将 FileHelpers 类仅视为 CSV 格式的“规范”。这应该是它唯一的作用。然后,如果您需要更“正常”对象中的记录,则将结果映射到更好的对象:

FileHelperEngine engine = new FileHelperEngine<FileHelpersOrder>(); 
var records = engine.ReadFile("FileIn.txt");

var niceOrders = records.Select(
x => new NiceOrder()
{ Number = x.Number,
Customer = x.Customer
// etc.
});

FileHelpersOrder 是您的 CSV 规范,NiceOrder 类将是一个适当的 OOP 类,具有必要的属性、方法等。

关于c# - 用于在平面文件中对字段进行分组和结构化数据的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com