Нужна помошь по архитектуре - C#

Узнай цену своей работы

Формулировка задачи:

Всем добрый день. Есть вот такая архитектура:
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
        }
    }
И таких вот дочерних классов, как ChildClass_A, довольно много. Прошу совета, как элегантнее всего вынести куда-то повторяющийся функционал методов SaveToXml и LoadFromXml, чтобы не описывать их в каждом классе.

Решение задачи: «Нужна помошь по архитектуре»

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;
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы