Victor Golovko: Фасад-это когда мы сложную логику прячем в метод или класс с которым взаимодействуют другие подсистемы.
Еще есть Data mapper - его задача получать данные из бд и преобразовывать их в объекты модели (как то так).
Максим Павлов: я понял почему я сомневался. нет уверенности что этот метод вернет тот тип данных, который требуется.
P.S. Может я чего то недопонимаю, но каждый метод нужно описывать в интерфейсе получается и нет защиты от дурака.
Максим Павлов: Смысл в том, что от ORM я ожидаю например коллекцию. Она "гарантированно возвращается".
(взял в кавычки т.к. она вернуть может что угодно тоже, но так декларируют разработчики продукта).
А если разработчик без интерфейса например преобразовал данные в массив, то получим траблы. Я про то, что разработчик сам должен писать интерфейсы для каждого метода. Можно ли как то это автоматизировать/декларировать, чтобы все методы данного orm facade возвращали нужный тип данных?
Как я понимаю декоратор предназначен для того, чтобы преобразовать данные в другой вид не изменяя самих данных. Мне их преобразовывать не нужно. И наделять свойствами какими то тоже не нужно.
У фасада цель скрыть логику получения данных, да и вообще скрыть все происходящее за кулисами, а только показать красивый спектакль. По факту это предоставление API для каких то операций. Как я понимаю Любое API и есть фасад. Поэтому как по мне декоратор совсем не то.
Victor Golovko: нельзя говорить о паттерне фасад, применяя его к одному методу.
Фасад скрывает сложную логику разных частей системы, отдавая наружу простой API.
Декоратор же работает с одним интерфейсом, как вашем случае.
Как я скзаал, тут вообще неприменимо слово "паттерн". Точнее применимо, но в контексте "паттерн головного мозга". :)
Как я скзаал, тут вообще неприменимо слово "паттерн". Точнее применимо, но в контексте "паттерн головного мозга". :)
Я не воспринимаю паттерн как некий ненавистный "паттерн" )). Паттерн это образец. И если люди сталкивались с такими проблемами, а они явно за 50 лет сталкивались с такими проблемами, то явно есть решение. И скорее всего это решение как то называется
Фасад скрывает сложную логику разных частей системы, отдавая наружу простой API.
Ну так так и есть. Я для этого и делаю эту обвертку, чтобы было не важно откуда данные. А главное API их получения и сохранения
для Active Record как правило не используют никаких подобных обверток, т.к. суть этого паттерна заключается в том - что все инструменты по управлению записями находяться в одном классе. То что Вы хотите сделать больше всего похоже на Repository (но с использованием ActiveRecord он конечно будет кривым)
для Active Record как правило не используют никаких подобных обверток,
Почему? Я хочу предоставить разработчикам API доступа данным. Например, я человек, который ответственен за базы данных. И у нас есть соглашения, что что я пишу API получения этих данных и разработчика не волнует как я это делаю. И если какого то метода нет, то и данных тоже нет. Преимущество такого подхода в том, что контролируешь какие данные можно получить/изменить, а какие нет.