Принцип единой ответственности для классов Дао

Это пример кода, который не следовал принципу единой ответственности,

public class EmailSender
{
  public void SendEmail(string customerID, 
                       string emailNotificationType)
  {
    //STEP1: load customer details
    //STEP2: get email content
    //STEP3: send email (using SmtpClient class)
  }

  public string GetEmailContent(Customer customer, 
                 string emailNotificationType)
   {
    // Build the email notification content
   }
}

Я согласен, это создаст проблему в случае, если мне нужно сделать следующее,

-> Changes in the way, you are loading customer details.

-> Changes to the email content because of requirement enhancements / changes.

-> If there any change in the way you are sending the email instead of using SmtpClient class or something like that.

поэтому мы должны применять принцип единой ответственности для разделения классов. Я полностью согласен с этим принципом. Скажем, мне нужно создать три класса, как

EmailSender - который фокусируется только на отправке электронной почты CustomerRepository - который фокусируется только на получении данных клиента EmailContentBuilder - который анализирует содержимое электронной почты

Но скажем, если у меня есть Dao, подобный CustomerDao, на данный момент все операции CRUD, связанные с CustomerDao, относятся к одному и тому же классу, как показано ниже

Класс CustomerDao
- Добавлять()
- обновить () - получить ()
- получить все()
- Обновить()

Нужно ли применять Single Responsibility Principle здесь? Если да, то как подать заявку на класс CustomerDao?

Спасибо,
Гарри

1 ответ

Вы не хотите обращаться в DAO, потому что это только одна вещь.

хороший пример

источниковедение

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

SRP не следует понимать строго. Один объект должен иметь очень мало обязанностей, а не "один". Здесь CustomerDao отвечает только за постоянство клиента, поэтому он несет только одну ответственность.

Несмотря на свое название, SRP выражается как " У класса должна быть только одна причина для изменения". DAO изменяется по единственной причине: при сопоставлении таблицы базы данных и бизнес-объекта изменяется так, что DAO не нарушает SRP.

Подумайте о примере: бизнес-логика меняется так, что нам нужно добавить еще несколько данных к нашему объекту: мы добавляем поля в наш бизнес-объект, столбцы в таблицу базы данных и, конечно, нам нужно изменить отображение. Тогда мы, вероятно, изменим методы получения / добавления / обновления нашего единственного класса DAO.

Для ясного понимания принципа я бы порекомендовал прочитать первоисточник принципов SOLID: книгу Роберта Матина " Гибкая разработка программного обеспечения, принципы, шаблоны и практики".

Другие вопросы по тегам