Принцип единой ответственности для классов Дао - PullRequest
3 голосов
/ 25 июня 2019

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

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 - которые анализируют содержимое электронной почты

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

Класс CustomerDao
- add ()
- update () - get ()
- getAll ()
- update ()

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

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

1 Ответ

0 голосов
/ 11 июля 2019

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

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

источник

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

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

...