Tôi muốn lưu một số lớp và vì xml-serialization sẽ không thực hiện trong trường hợp của tôi, tôi đang lưu các giá trị theo cách thủ công vào tài liệu xml. Hoạt động tốt, nhưng FxCop không thích nó và kể từ khi FxCop bình thường đưa ra lời khuyên tốt và lý do tại sao tôi không nên làm mọi thứ theo một cách nào đó tôi cố gắng giữ cho nó hạnh phúc.Khiếu nại FxCop: Các loại xml bê tông lộ ra và cải thiện xấu
Lần này, tôi không hiểu đây là cải tiến.
Đây là những gì tôi đã có:
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)
{
}
Và đây là những gì FxCop than phiền:. "Sửa đổi thành viên 'OtherclassSave2 (XmlNode)' để nó không còn thấy nhiều loại bê tông 'XmlNode' Use IXPathNavigable để đại diện cho các nguồn dữ liệu XML. "
Và bây giờ giải pháp tuyệt vời của tôi:
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); }
Bằng cách này tôi nhận được nút của tôi trong các phương pháp khác và FxCop là hạnh phúc, nhưng tôi thực sự không nhìn thấy sự cải thiện và tôi cần một nút để thêm những thứ trong đó, không phải cái gì để đọc.
tôi mặc dù về việc thay đổi khoảng trống SaveInThisNode (XmlNode) thành một XmlNode GetMeTheNode() nhưng để tạo ra các nút qua CreateElements, tôi cần XmlDocument đối tượng mà tôi không được phép sử dụng như một tham số, nhưng tôi có thể tạo các XmlDocuments mới trong mỗi bước, tốt.
Giải pháp của tôi rất đơn giản và hiệu quả cho mọi thứ tôi muốn, nhưng FxCop dường như không cho phép các giải pháp không rõ ràng tồi tệ và phức tạp hơn.
Hiểu biết của tôi là bạn phải ném xung quanh giao diện đó thay vì các lớp triển khai giao diện đó. Khái niệm khá phổ biến. Đôi khi nó làm cho mọi thứ dễ dàng hơn, những lúc khác, không quá nhiều. Đó là một trong những nguyên tắc "meh" đó. – Zenexer
'XmlNode' thực hiện' IXPathNavigable', xem câu trả lời y. Bạn có thể sửa cảnh báo rất dễ dàng. – ken2k
Bạn cũng có thể làm cho phương pháp nội bộ để giải quyết vấn đề của bạn, tôi đoán vậy. –