M. Rawan Ответов: 1

Вопрос о дизайне приложения C#


привет

Я разрабатываю новое приложение для оплаты труда сотрудников, которое требует добавления нескольких типов сотрудников в будущем, и я не уверен, что мой подход является правильным.

Что я уже пробовал:

public interface IEmployee {
        string Name { get; set; }
        decimal CalculateSalary(DateTime from,DateTime to,List<Vacation> vacations);
    }

а побуждение к работе с базой данных sql происходит следующим образом
public class Emp1 : IEmployee {
        public int Id { get; set; }
        public string Name { get; set; }
        public readonly int emptype = 1;
        
    }
    public class Emp2 : IEmployee {
        public int Id { get; set; }
        public string Name { get; set; }
        public readonly int emptype = 2;
        
    }
    public class Vacation {
        public int Id { get; set; }
        public int EmpId { get; set; }
        public int EmpType { get; set; }
        public DateTime Date { get; set; }
        public string Reason { get; set; }
        
    }

Я пошел на такое внедрение, потому что каждый сотрудник очень отличается от других, но отпуск для них всех одинаков.
есть ли лучший подход?
Я также сбит с толку Как я должен проверять имя сотрудника никто не повторяется

1 Ответов

Рейтинг:
12

RickZeeland

Ваш подход выглядит нормально для меня, однако, когда ваше приложение становится больше и сложнее, вы можете быть заинтересованы в реализации Заводского шаблона:
https://dzone.com/articles/design-patterns-c-factory[^]
Шаблоны Проектирования C# - Заводской Метод - Лабиринт Кода[^]

Иногда создание диаграммы (UML) может помочь, см.: Как создать диаграмму классов отношений между сотрудниками и менеджерами[^]

Чтобы проверить имя сотрудника, вы можете использовать уникальное ограничение в своей базе данных или, если вы предпочитаете решение на языке C#, вы можете использовать словарь, см.: Словарь<TKey,TValue> Class (System.Коллекции.Общая) | Майкрософт Документы[^]

Если ваши потребности в базе данных просты я бы рекомендовал LiteDB, видеть: лучшие-базы данных-для-малого-сетевого-приложения[^]

Если вы хотите использовать SQL Server (предупреждение не самый простой вариант), взгляните на: Запросов к таблицам SQL сервера от .Чистая[^]

Если вам нужно независимое от базы данных решение, то вы можете использовать ОЗР, видеть: платформы-для-С[^]

Дополнительные сведения о проектировании баз данных см. В разделе: интернет-ресурсы в освоении-реляционных баз данных-проектирование[^]


M. Rawan

спасибо за ваш повтор и заводской шаблон очень хорош но если это нормально у меня есть следующий вопрос:
как это должно храниться в базе данных
если каждый конкретный класс emp имеет свою собственную таблицу, как применить метод get all employees?
должен ли я иметь таблицу BaseEmp для хранения имен, и каждый конкретный класс emp имеет свои детали в другой таблице.

RickZeeland

См. пример SQL Server, чтобы получить представление о том, как настроить базу данных, однако я бы не рекомендовал SQL Server, если вы только начали разработку базы данных.