Нужна помошь по архитектуре - 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;
}
}
}
}