Так же, как контроллер имеет конечную точку UpdatePhone, у пользователя будет метод UpdatePhone, который только проверяет и обновляет номер телефона. Пользовательский AR также будет иметь UpdateEmail, UpdateAddress и т. Д.
Если пользователь может одновременно изменять несколько свойств пользователя во внешнем интерфейсе, вы используете Controller для выяснения этого. У вас будет конечная точка UpdateUser на контроллере, которая решит, что изменилось, а что нет, а затем вызовет все необходимые методы для пользователя. Некоторый псевдокод:
If (PhoneInfoUpdated) User.UpdatePhone ({поля, отправленные пользователем)};If (EmailInfoUpdated) User.UpdateEmail ({поле, отправленное пользователем)};If (AddressInfoUpdated) User.UdateAddress ({предоставленная пользователем информация об адресе});
(Вы, вероятно, просто удалили это для краткости в сообщении, но помните, что здесь есть два уровня проверки данных. Контроллер проверяет типы дат, например, если вы ожидаете целые числа, вы на самом деле получаете целые числа, даты - это даты, номера телефонов и электронные письма - в правильном формате и т. д. Затем внутри User.Update - каким бы методом вы ни проверяли, удовлетворяются ли бизнес-правила, например, адрес электронной почты недубликат существующего и т. д.)
Я не понимаю, как адрес может прожить собственную жизнь, не будучи владельцем пользователя, но если это ваш бизнес-кейс, то это должен бытьAR. Поэтому для изменения адреса у вас должна быть отдельная конечная точка API адреса, которая выполняет правильные манипуляции, а не пытается отправить ее через конечную точку пользователя. Внешний интерфейс должен принять решение о правильной конечной точке для вызова, если он вызывает API-интерфейсы напрямую, или если вы используете MVC, контроллер получает обратную передачу и затем может либо вызвать надлежащие API-интерфейсы, либо соответствующие методы на AR.
Что касается удалений, я никогда не был фанатом фактического удаления, поэтому я бы порекомендовал добавить флаг Active (или флаг Deleted в зависимости от того, на какой стороне этого бесконечного обсуждения вы находитесь). Независимо от того, действительно ли вы удаляете или просто устанавливаете флаг, у вас должен быть метод User.Delete. Если вы действительно удаляете строку, я предпочитаю, чтобы это был статический метод класса User, поэтому вам не нужно извлекать пользователя, чтобы просто удалить его. Если вы используете флаг, метод Delete должен быть общедоступным в классе, потому что в действительности он просто устанавливает свойство, как любое другое свойство.