我有一些业务对象,我想将它们从.yaml文件序列化(反)成file文件。
因为我希望.yaml是人类可读的,所以我需要对serialize和deserialize方法有一定程度的控制。
序列化逻辑应该放在哪里?
A)如果我教每个对象,如何反/序列化自己,但这可能违反了single-responsibility-principle。
B)如果我把它放在一个通用的serialization模块中,可能会违反open-closed-principle,因为将来会添加更多的业务对象。此外,现在需要在两个位置执行对对象的更改。
对于小型应用程序来说,解决这个难题的可靠方法是什么?
发布于 2020-07-17 11:18:25
通常在这种情况下,您会希望业务对象处理它们自己的序列化。这并不一定违反单一责任原则,该原则断言每个对象都应该有一个工作和一个老板。这仅仅意味着一个作业包含可序列化。用户拥有业务对象,并希望能够对其进行序列化,因此对可序列化的需求来自与其他需求相同的地方--用户。
不过,也有一些危险的地方。首先,您是否真的需要坚持业务对象是可序列化的,或者您是否可以让用户决定它们是否可序列化?如果您强加了可序列化要求,那么很可能违反了SRP,因为随着序列化系统的发展,您将对对象施加您自己的要求。
其次,您可能需要仔细考虑这些对象用来序列化自身的接口。一定要是yaml吗?为什么?它必须是一个文件吗?尽量不要强加可能会发生变化的需求,因为它们依赖于您在系统的其余部分中做出的特定实现决策。这最终也违反了SRP,因为他们必须根据来自两个不同来源的需求来发展这些对象。最好是对象本身启动它们自己的序列化,并且可以最大限度地选择实现。
https://stackoverflow.com/questions/62897076
复制相似问题