Лучшая практика с использованием метода в классе - PullRequest
0 голосов
/ 04 июля 2018

Предположим, у меня есть класс Employee. Должен ли я добавить в класс Employee методы add, delete, view и т. Д.? или этот класс должен только для класса getter / setter?

что лучше / приемлемо / лучшая практика?

Employee
-------------------
+int id (get/set)
+string name (get/set) (methods are called in another class)

Employee
-------------------
+int id (get/set)
+string name (get/set)
-add employee
-remove employee

Ответы [ 6 ]

0 голосов
/ 04 июля 2018

Первые 5 принципов объектно-ориентированного проектирования (S.O.L.I.D).

После работника

public class Employee :ViewModelBase, IEditableObject
{
   public int EmployeeID { get; set; }

   public string FullName
  {
     get
     {
         return $"{this.Name} {this.Surname}";
     }
   }

    private string _Name;
    public string Name
    {
        get { return _Name; }
        set
        {
           _Name = value;
           OnPropertyChanged("Name");
         }
     }
}

После создания универсального класса с репозиторием для управления добавлением, удалением, обновлением и т. Д. *

public interface IRepository<T> where TEntity  : class
{
    IEnumerable<TEntity> GetUsers();
    IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate);
    TEntity GetById(int id);
    void Save(TEntity model);
    void Delete(int id);
}

И репозиторий реализации базы сотрудников

public Class EmployeeManager : Repository<Employee>
{
    public IEnumerable<TEntity> GetUsers()
    {
       //your code
    }
    public IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate)
    {
       //your code
    }
    public TEntity GetById(int id)
    {
       //your code
    }
    public void Save(TEntity model)
    {
        //your code
    }
    public void Delete(int id)
    {
        //your code
    }

    public void DeleteAll(Employee[] employees)
    {
       //your code
    }
 }

Лучшие практики репозитория Unity

0 голосов
/ 04 июля 2018

Если у вас есть база данных:

Для аналогичных целей у меня есть базовый класс для всех сущностей, который заботится о функциональности CRUD и идентификаторе. Все сущности наследуются от этого базового класса и заботятся об отдельных свойствах, таких как имя, адрес и т. Д.

Также у меня есть коллекции всех сущностей одного типа, которые управляют предметами в нем.

0 голосов
/ 04 июля 2018

Это сводится к разделению интересов

Когда вы решаете эти вещи, вам нужно использовать свою интуицию и думать об этом логически. Что касается работника.

У вас есть класс с именем Employee, затем включите в класс Employee все, что касается Сотрудника . Для сотрудника не имеет смысла иметь возможность Add и Remove Сотрудники для себя. Может быть, то, что вы ищете, это класс Employees (множественное число), который будет управлять вашими действиями сотрудников.

Но ваше Employee "будет" иметь Name и Id и другие вещи, которые его касаются.

Цель здесь состоит в том, чтобы как можно больше разбить ваши концепции на конкретные проблемы реального мира, это облегчит понимание проекта, если вы сделаете

0 голосов
/ 04 июля 2018

Класс сотрудника имеет информацию о сотруднике, а также методы сотрудника. Похоже, вы пытаетесь сохранить коллекцию сотрудников (исходя из добавления, удаления требования сотрудника)

В этом случае добавлять, удалять, удалять не являются обязанностями класса сотрудников, а скорее сбором сотрудников.

Читайте о принципах ООП.

0 голосов
/ 04 июля 2018

Краткий ответ: перейдите с опцией 2

Если вы рассматриваете разделение проблем, у вас должен быть Сотрудник для отслеживания информации об одном человеке и Репозиторий сотрудников для управления всеми вашими сотрудниками. Из чего состоит запись, должно быть независимо от того, как запись хранится / запрашивается.

0 голосов
/ 04 июля 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...