我必须使用 IBM WebSphere 与 IBM 主机通信。主机端的服务只能使用平面文件。
在我这边,我想使用 CQRS(命令/查询)
换句话说,我想序列化命令/查询并反序列化查询结果
我可以使用标准反射课程来做到这一点,但我的问题是是否有更好的方法来做到这一点?
我可以使用动态吗?
Flatfile > ParsedObjectStructured > Dynamic type > static type
我必须使用 IBM WebSphere 与 IBM 主机通信。主机端的服务只能使用平面文件。
在我这边,我想使用 CQRS(命令/查询)
换句话说,我想序列化命令/查询并反序列化查询结果
我可以使用标准反射课程来做到这一点,但我的问题是是否有更好的方法来做到这一点?
我可以使用动态吗?
Flatfile > ParsedObjectStructured > Dynamic type > static type
这在很大程度上取决于平面文件的格式是什么,以及模式是如何工作的——例如,它是自描述的吗?但是,在我看来,这里的大部分工作都是了解平面文件格式(和模式绑定)。从那里开始,“反序列化为静态类型”与“反序列化为动态类型”的选择有点没有意义,我想说反序列化为动态类型只是必须将其全部映射到静态类型。此外,静态类型可以(再次,取决于文件格式的细节)是一个方便的地方来装饰类型说“这里是如何解释这个”,如果文件格式需要规范。例如(我完全是在编造这个——不要指望这与你的格式有关):
[Frobber(Offset = 4, Format = DataFormat.LittleEndianInt32)]
public int Id {get;set;}
[Frobber(Offset = 0, Format = DataFormat.LittleEndianInt32)]
public int Index {get;set;}
[Frobber(Offset = 8, Format = DataFormat.FixedAscii, Size = 20)]
public string Name {get;set;}
[Frobber(Offset = 28, Format = DataFormat.Blob)] // implicit Size=16 as Guid
public Guid UniqueKey {get;set;}
whereFrobberAttribute
只是您可能发明的用于指定文件格式的东西。当然,如果模式是在文件内部定义的,这可能不是必需的。
重新反射:如果数据使用量相当轻,基本反射将正常工作;但总的来说,反射可能相当昂贵。如果您需要它是最佳的,您可能希望实现考虑策略缓存(即只做一次发现工作)和元编程(将策略变成现成的 IL,而不是在运行)。
如果文件格式是一种常见/流行的格式,您可能会发现存在用于读取该格式的现有工具。如果没有,你可以自己动手,或者找一些喜欢编写序列化和元编程工具的疯子。这样的人确实存在...