Нужна помошь по архитектуре - C#
Формулировка задачи:
Всем добрый день.
Есть вот такая архитектура:
И таких вот дочерних классов, как ChildClass_A, довольно много.
Прошу совета, как элегантнее всего вынести куда-то повторяющийся функционал методов SaveToXml и LoadFromXml, чтобы не описывать их в каждом классе.
public class BaseClass { /* * Набор общих полей */ } public class ChildClass_A : BaseClass { /* * набор индивидуальных полей */ /// <summary> /// Имя файла для сохранения /// </summary> public string ChildClass_A_XMLFileName { get; set; } public void SaveToXml(List<ChildClass_A> propertiesToSave, string filename) { //тут сохраняем List<ChildClass_A> в файл, индивидуальный для ChildClass_A } public List<ChildClass_A> LoadFromXml(string filename) { //тут грузим List<ChildClass_A> из файла, индивидуального для ChildClass_A } }
Решение задачи: «Нужна помошь по архитектуре»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml.Serialization; using System.Runtime.Serialization; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Derived_A[] derived_A = new Derived_A[] { new Derived_A(){Name_A="aaa"}, new Derived_A(){Name_A="bbb"}, new Derived_A(){Name_A="ccc"} }; XmlOperator<Derived_A>.SaveToXml(derived_A, "data.xml"); Derived_A[] collection = XmlOperator<Derived_A>.GetFromXml("data.xml"); } } [Serializable] public abstract class Base { public Base() { } public int ID { get; set; } } [Serializable] public class Derived_A : Base { public Derived_A() { } public string Name_A { get; set; } } [Serializable] public class Derived_B : Base { public Derived_B() { } public string Name_B { get; set; } } [Serializable] public class Derived_C : Base { public Derived_C() { } public string Name_C { get; set; } } public class XmlOperator<T> where T : Base { public static void SaveToXml(T[] collection, string path) { XmlSerializer serializer = new XmlSerializer(typeof(T[])); using (FileStream fs = File.OpenWrite(path)) { serializer.Serialize(fs, collection); } } public static T[] GetFromXml(string path) { XmlSerializer serializer = new XmlSerializer(typeof(T[])); using (FileStream fs = File.OpenRead(path)) { T[] collection = (T[])serializer.Deserialize(fs); return collection; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д