Re: Как называть одинаковые сущности в разных слоях?
От: Vladek Россия Github
Дата: 12.02.20 08:24
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Предположим, есть сущность User. Для работы с БД используется слой доступа к данным. Для представления этого User-а логично создать класс User с полями, соответствующими столбцам в таблице БД. Для обмена данными с мобильным приложением используется JSON. Логично создать класс User с полями, которые нужны этому мобильному приложению. Скорей всего часть этих полей будет совпадать с полями для БД, но вряд ли на 100%. Для отрисовки HTML мы во View передаём опять же класс User (предположим, мы не пользуемся новомодными SPA, а пишем по старинке, с отрисовкой на сервере). Опять же эти поля вряд ли на 100% совпадают. При изменении пользователя нам приходит форма. В этой форме опять же поля от класса User. Т.е. это уже 4-я сущность. А ещё разные REST-методы и формы могут требовать разный набор полей. Как со всем этим поступать?


vsb>1. Использовать первый класс везде. Возникает опасность, что юзер сможет изменить поле, которое ему менять не положено. С этим можно пытаться бороться...


У этой сущности есть идентичность (ID) — вот это и использовать везде. Написать тип UserId (не использовать примитивный тип), который и использовать для запроса дополнительных данных в нужном виде, когда они действительно нужны.

vsb>2. Писать новый класс для каждого юз-кейса. Как их называть? Ведь очевидно, что в части классов придётся работать с несколькими классами User сразу и можно просто запутаться, кто есть кто. Например в Java, где импорты переименовывать нельзя, а полностью специфицированные имена слишком длинны. Делать префиксы? Ну их не хватит на всё. Как данные копировать из одного такого класса в другой? Рефлексией? Руками скучно и долго.


Стараться не копировать данные туда-сюда, а просто иметь возможность их запросить в самый последний момент по идентификатору, а ещё лучше просто передать идентификатор туда, где делается реальная работа.
http://files.rsdn.org/43395/hr-kyle-theisen-04.png
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.