【发布时间】:2021-12-03 22:47:08
【问题描述】:
我目前正在构建自己的序列化程序,并且我不想再滥用 System.Xml.Linq 类,所以我正在构建自己的序列化程序。
假设我有这些课程:
- XmlElement
- XmlAttribute
- XmlText
让我们假设它们只有一个返回string 的Name 属性和一个返回IReadonlyList<IXmlNode> 的Value 属性。
我的问题是,让类自己负责写出自己的序列化值会更有效,还是让一个使用模式匹配的类更有效?
例如选项A:
public class XmlElement: IXmlNode {
public void Write(StringBuilder stringBuilder) {
stringBuilder.WriteLine($"<{Name}>")
foreach(var child in Children) {
child.Write(stringBuilder);
}
stringBuilder.WriteLine($"</{Name}>")
}
}
或选项B:
public class XmlWriter {
public string Write(IXmlNode node, StringBuilder passedStringBuilder) {
var stringBuilder = passedStringBuilder ?? new StringBuilder();
if (IXmlNode is XmlElement xmlElement) WriteElement(xmlElement, stringBuilder);
if (IXmlNode is XmlAttribute xmlAttribute) WriteAttribute(xmlAttribute, stringBuilder);
if (IXmlNode is XmlText xmlText) WriteText(xmlText, stringBuilder);
return stringBuilder.ToString();
}
public void WriteElement(XmlElement element, stringBuilder) {
stringBuilder.WriteLine($"<{element.Name}>")
foreach(var child in element.Children) {
Write(child, stringBuilder);
}
stringBuilder.WriteLine($"</{element.Name}>")
}
}
显然,编写 XML 序列化程序还有更多内容,这不是很好的代码,我在这里和那里遗漏了一些部分。
我最关心的是哪个概念最有效。
其他信息
由于有人要求定义我所说的效率,这里有一些因素我想对实施进行评分:
SpeedGarbage collectionMemory allocation
当然,代码可读性也是一个因素,但是,此时我已经编写了两个实现,关于可读性选项 A 有我的偏好。 选项 B 在一个文件中产生了相当多的代码行,可以说它对一个类来说做得太多了。
简而言之:
除非 选项 B 大大优于 选项 A,否则我的偏好将倾向于 选项 A。
【问题讨论】:
-
请定义效率
-
您无法自己进行测试是否有原因?
-
但是您已经编写了两个基本实现。如果您问题中的代码足以让其他人回答问题,那么您也应该足以回答问题。
-
@devlin 只有当每个人都拥有相同的知识时才会如此,这将使 StackOverflow 完全无用。
-
@ShrimpPerator :除了这个问题不是仅依赖于知识的问题。 “效率”是整个领域的因素,其中大部分是我们不知道的。
标签: c# .net-core serialization xml-serialization