Как оптимизировать код, может шаблоном?

128
26 декабря 2020, 02:10

Всем привет. Есть 5 инструментов и мне нужно с ними делать всякие стандартные вещи добавлять/удалять/изменять/показать их в таблице.

Я подключил Entitty и создал базу для каждого объекта.

Калибр, Скобы, Пробки,Резьбовые Кольца,  шаблоны.

Вот код самих обьектов

abstract class ToolProduct
        {
            public ToolProduct() { }
            public ToolProduct(string name)
            {
                Name = name;
            }
            [MinLength(4), MaxLength(15), Required]
            public string Name { get; set; }
            [Key]
            public int Id { get; set; }
        }
        class Caliber : ToolProduct
        {
            public Caliber() { }
            /// <summary>
            /// Конструктор детали Калибр
            /// </summary>
            /// <param name="name">Наименование детали</param>
            /// <param name="type">Тип детали предельный,нормальный,регулируемый</param>
            public Caliber(string name, string type):base(name)
            {
                TypeC = type;
            }
            public string TypeC  { get; set; }
        }
        class Clamp : ToolProduct
        {
            public Clamp() { }
            /// <summary>
            /// Конструктор Скобы
            /// </summary>
            /// <param name="name">Наименование скобы</param>
            /// <param name="typesize">Тип размера 0,30,60,90,120,150</param>
            /// <param name="diametrcontrol">Контроль среднего диаметра</param>
            public Clamp(string name,TypeS typesize, bool diametrcontrol = false):base(name)
            {
                TypeSize = typesize;
                DiametrControl = diametrcontrol;
            }
            public bool DiametrControl { get; set; }
            public TypeS TypeSize { get; set; }
            internal enum TypeS
            {
                S_0 = 0,
                S_30 = 30,
                S_60 = 60,
                S_90 = 90,
                S_120 = 120,
                S_150 = 150
            }
        }
        class Plug : ToolProduct
        {
            public Plug() { }
            /// <summary>
            /// Конструктор Пробки
            /// </summary>
            /// <param name="name">Наименование пробка</param>
            /// <param name="type">Тип односторонний, двухсторонний </param>
            public Plug(string name,string type):base(name)
            {
                TypePlug = type;
            }
            public string TypePlug { get; set; }
        }
        class Ring : ToolProduct
        {
            public Ring() { }
            /// <summary>
            /// Конструктор Резьбового Кольца
            /// </summary>
            /// <param name="name">Наименование кольца</param>
            /// <param name="typeThread">Вид резьбы метрический,дюйм,трубный,специальный</param>
            /// <param name="profile">Профиль полный,укороченый,гладкие резьбовые и т.д.</param>
            public Ring(string name,string typeThread, string profile):base(name)
            {
                TypeThread = typeThread;
                Profile = profile;
            }
            public string TypeThread { get; set; }
            public string Profile { get; set; }
        }
        class Template : ToolProduct
        {
            public Template() { }
            /// <summary>
            /// Конструктор шаблонов
            /// </summary>
            /// <param name="name">ГОСТ наименование шаблона</param>
            public Template(string name) : base(name) { }
        }

DB_Connection - залита в App.config

<connectionStrings>
    <add name="DB_Connection" connectionString="Data Source=DEIMOS-PC\DEIMOS;Initial Catalog=AutomationSystem;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

А вот код этих коллекций ниже и их DataContext для Entitty в виде DbSet

ВОПРОС : как можно оптимизировать this shit

Может шаблонами типа Factory Method, Builder, Abstract Factory ???

Можно ли тут использовать Ковариантность/Контравариантность и как

Или есть иной способ объединения?

Тут все очень повторяется так и просится сократить что то

class CaliberCollection : DbContext
    {
        List<Caliber> CaliberList;
        internal CaliberCollection(string DBConnection = "DB_Connection") { }
        //Этот конструктор хочу использовать после того как я получу список объектов из базы
        //Что бы потом со списком привычнее работать типа создать 
        //методы Find(params) Add() Remove() IsExist() Change() и т.д.
        public CaliberCollection(List<Caliber> list) { CaliberList = list; }
        public DbSet<Caliber> Collection { get; set; }
    }
    class ClampCollection : DbContext
    {
        List<Clamp> ClampList;
        internal ClampCollection(string DBConnection = "DB_Connection") { }
        public ClampCollection(List<Clamp> list) { ClampList = list; }
        public DbSet<Clamp> Collection { get; set; }
    }
    class RingCollection : DbContext
    {
        List<Ring> RingList;
        internal RingCollection(string DBConnection = "DB_Connection") { }
        public RingCollection(List<Ring> list) { RingList = list; }
        public DbSet<Ring> Collection { get; set; }
    }
    class PlugCollection : DbContext
    {
        List<Plug> PlugList;
        internal PlugCollection(string DBConnection = "DB_Connection") { }
        public PlugCollection(List<Plug> list) { PlugList = list; }
        public DbSet<Plug> Collection { get; set; }
    }
    class TemplateCollection : DbContext
    {
        List<Template> TemplateList;
        internal TemplateCollection(string DBConnection = "DB_Connection"){}
        public TemplateCollection(List<Template> list) { TemplateList = list; }
        public DbSet<Template> Collection { get; set; }
    }

Для теста вот так я их вызываю

private void Btn_AddRow_Click(object sender, RoutedEventArgs e)
        {
            //CaliberCollection ClampCollection RingCollection PlugCollection  TemplateCollection
            Database.SetInitializer(new CreateDatabaseIfNotExists<CaliberCollection>());
            using (var DB = new CaliberCollection())
            {
                var mycollection = DB.Collection.ToList();
                Tb_SearchKey.Text = mycollection.Count.ToString();
            }
        }
READ ALSO
C# SQL поиск по таблице

C# SQL поиск по таблице

Не могу понять, в чем проблема, где-то накосячила с запросом, но не могу понять, где

120
Как преобразовать форматированные даты в цифры (3.12M)

Как преобразовать форматированные даты в цифры (3.12M)

Допустим строка 3,12КЯ хочу преобразовать его в норм число

132
Запрет на ввод своего значения в Combobox

Запрет на ввод своего значения в Combobox

Когда пользователь выбирает элемент из списка в Combobox, он может ввести и свое значение, выглядит это так:

112
Интеграция ресурсов в приложение

Интеграция ресурсов в приложение

У меня есть приложение с разными темами и мне нужно как-то получать к ним доступСамым подходящим для меня является файл ресурсов

94