DDD: Где ставить чеки безопасности? Где поставить галочку, если пользователю разрешено это делать?

DDD: Где ставить чеки безопасности? Где поставить галочку, если пользователю разрешено это делать?
DDD: Где ставить чеки безопасности? Где поставить галочку, если пользователю разрешено это делать? - altumcode @ Unsplash

Поскольку группы строго разделены по компаниям (есть единственная group

company), очень странно, что GroupRepository вообще не разделена.

Зачем пользователю из компании А сообщать, что у него нет разрешения на добавление пользователей в группу, принадлежащую компании Б? Они вообще не должны видеть, что группа Б существует. Почему обе компании не должны иметь возможность иметь группу с одинаковым именем?

Я бы ожидал, что код будет выглядеть примерно так.

def add_member(data, actor):  # <-- actor is the user that clicked the button in the ui
    company = CompanyRepository.find(actor.company)
    group = company.groups().find(id=data.id)
    new_member = UserRepository.find(id=data.new_member)

    group.add_member(new_member)

    return 'OK'

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

  • UnknownCompany - не должно произойти
  • UnknownGroup - для вашей компании
  • UnknownUser

И все.


LetsCodeIt, 5 января 2023 г., 06:17