Куда мне поместить бизнес-логику, когда я использую шаблон репозитория?

StackOverflow https://stackoverflow.com/questions/1618673

  •  06-07-2019
  •  | 
  •  

Вопрос

Я использую шаблон репозитория для своего приложения.У меня есть класс User.Пользователь идентифицируется по электронной почте.UserRepository содержит метод CreateUser(Пользователь user).Существует бизнес-правило, гласящее, что у пользователей должен быть уникальный адрес электронной почты.

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

Это определенно бизнес-правило;это бизнес-логика.Я думаю, что некорректно ставить эту проверку в моей реализации UserRepository.

Это было полезно?

Решение

Такие вещи обычно включаются либо (1) в службу, либо (2) непосредственно в схему как ограничение базы данных (и часто оба).

Используя сервис, вы не получаете доступ к хранилищу напрямую из клиентского кода; Вы звоните в службу, которая выполняет полезные для вас операции.

Например, что-то вроде:

public class UserService : ... {
  private Repository<User> _userRepository;

  public void CreateUser(User u) {
    // Verify that the user's email is unique.
    if ( ... ) {
      _userRepository.Create(u);
    }
  }
}

Другие советы

Если вы создаете приложение, достаточно большое, чтобы использовать шаблон репозитория , тогда вы ' Я хочу поместить эту проверку как можно ближе к данным, возможно, к ограничению базы данных, например, к уникальному индексу / ключу. Это предотвращает возникновение ошибок, попадающих в код позже из-за поврежденных данных.

Предполагая, что вы используете базу данных для хранения, вы должны обязательно добавить уникальное ограничение на столбец электронной почты в базе данных.

Ознакомьтесь с этой замечательной статьей о Simple Talk:

Пять Простых ошибок проектирования базы данных, которых вам следует избегать

Смотрите в разделе 4:

Обеспечение целостности с помощью приложений

Сторонники целостности, основанной на приложениях , обычно утверждают, что ограничения негативно влияют на данные доступ.Они также предполагают выборочное применение правил, основанных на потребностях приложения, является наилучшим способом выбора......

Решение очень простое.

Не полагайтесь ни на что другое, что можно было бы обеспечить полнота и корректность , за исключением сама база данных. Под ничем я не подразумеваю ни пользователей, ни приложения внешние по отношению к базе данных.**

Итак, в вашем случае - уникальное ограничение для вашего столбца электронной почты действительно должно быть смоделировано в базе данных.Это лучшее место для размещения этой части бизнес-логики, и оно избавит вас от многих огорчений в долгосрочной перспективе.

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top