Идентифицировать стратегии классов и классов

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

Пока я знаю принципы, которые сказал дядя Боб, т.е.  избегайте слов ласки, таких как менеджер, данные, супер или процессор. Мы должны иметь возможность написать описание класса менее чем за 25 слов без использования таких слов, как "if", "и", "или" и ", но.

Однако проблема возникает, когда я пытаюсь определить, действительно ли я правильно слежу за SRP.

Например: у меня был сценарий, где 1. Мне нужно отправить электронное письмо пользователю. 2. Письмо будет проверяться, когда пользователь нажимает на ссылку

Итак, мой класс будет выглядеть следующим образом:

Сценарий 1:

class EmailVerifier
{
      function sendEmail();
      function verifyEmail();
}

ИЛИ

Сценарий 2:

class EmailVerifier
    {
          function verifyEmail();
    }

class MailSender
    {
          function verifyEmail();
    }

Если я скажу, что сценарий 1 правильный, я попытался написать описание класса, это было бы как

Класс EmailVerifier отправляет электронное письмо клиенту и проверяет электронную почту.

Если я скажу, что сценарий 2 правильный, то для каждого глагола я встречаюсь или каждая функция, например: verifyEmail(), sendEmail(), addEmail(), мне нужно для создания нового класса.

Скажите, пожалуйста, что может быть правильным.

Кроме того,

У меня есть сценарий, где я должен,

Добавить клиента, Удалить клиента, Изменить клиента, Сохранить клиента Поиск клиентов, SelectAll клиентов, FindCustomer по id

Для таких классов я могу назвать их как класс CustomerService или любая другая стратегия именования будет лучше.

Примечание: Я уже видел другие вопросы, подобные этим
Классы именования - как избежать вызова всего a "<WhatEver> Manager" ?

3
07 янв. '16 в 12:32
источник поделиться
1 ответ

Давайте начнем с примера Customer, потому что это проще. В стандартной архитектуре MVC у вас будет CustomerController, который взаимодействует с CustomerDAO. Я оставляю это как упражнение для вас, чтобы при необходимости использовать Google MVC-архитектуру и объект доступа к данным.

В примере электронной почты мы можем упростить проблему именования, применяя более объектно-ориентированный подход, а не процедурный. Проще говоря, ООП сообщает нам, что данные должны сочетаться с логикой, которая его манипулирует. В этом случае я предлагаю, чтобы объект Email (данные) был объединен с функцией verify (логикой), позволяя электронной почте проверять себя.

class Email
{
  function verify();
  function getMessage();
  // etc.
}

Еще лучше, шаблон проектирования, такой как Builder, позволит провести проверку перед построением объекта Email; потому что, в конце концов, зачем создавать объект Email в первую очередь, если он не может пройти проверку? Обратите внимание, что логика проверки, вероятно, изменится по той же причине, что и структура самого объекта электронной почты. Та же причина для изменения == Одиночная ответственность.

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

1
08 янв. '16 в 18:08
источник

Посмотрите другие вопросы по меткам или Задайте вопрос