Ott*_*inz 6 c# xml xpath fxcop
我想保存某些类,因为在我的情况下xml-serialization不会这样做我将值手动保存到xml文档中.工作正常,但FxCop不喜欢它,因为FxCop通常给出了很好的建议和原因,为什么我不应该以某种方式做事情,我试着让它快乐.
这一次,我不明白这是一个改进.
这就是我所拥有的:
public void Save()
{
XmlDocument doc = new XmlDocument();
XmlNode XmlNodeJob = doc.CreateElement("Job");
doc.AppendChild(XmlNodeJob);
OtherclassSave2(XmlNodeJob);//Node as Parameter
}
public void OtherclassSave2(XmlNode node)
{
}
Run Code Online (Sandbox Code Playgroud)
这就是FxCop所抱怨的: "修改成员'OtherclassSave2(XmlNode)',以便它不再公开具体类型'XmlNode'.使用IXPathNavigable来表示XML数据源."
现在我的解决方案很棒:
Run Code Online (Sandbox Code Playgroud)public void Save() { XmlDocument doc = new XmlDocument(); XmlNode XmlNodeJob = doc.CreateElement("Job"); doc.AppendChild(XmlNodeJob); OtherclassSave2(XmlNodeJob.CreateNavigator());//Interface from a node's navigator } public void OtherclassSave2(IXPathNavigable nav) { XmlNode node = (XmlNode)(nav.CreateNavigator().UnderlyingObject); }
这样我就可以在另一个方法中得到我的节点而且FxCop很高兴,但我真的没有看到改进,我需要一个节点来添加内容,而不是要阅读.
我虽然将void SaveInThisNode(XmlNode)更改为XmlNode GetMeTheNode()但是要通过CreateElements创建节点,我需要XmlDocument对象,我不允许将其用作参数,但我可以在每一步创建新的XmlDocuments,很好.
我的解决方案很简单,并且可以完成我希望它做的所有事情,但是FxCop似乎不允许解决方案显然更糟,更复杂.
只是建议您不要在方法签名中耦合 XmlNode 的具体实现。这允许您更改内部实现,而不会影响使用该类的任何内容。
如果您需要具体类的特定功能,建议您可以忽略该警告。如果这是一个面向公众的 API,您应该尝试尽可能多地解耦,这将使您可以自由地更改实现,而更改方法签名的机会更少,从而迫使 API 的使用者更改其实现。
| 归档时间: |
|
| 查看次数: |
1624 次 |
| 最近记录: |