Comments 7
Думаю, надо сперва понять, что такое Repository и чем отличается от DAO или Storage в контексте приложения. И, возможно, будет более понятно, как использовать слой, отвечающий для работы с хранением данных.
Какой смысл оценивать нужность какого-то подхода именно через SOLID? Это набор правил с довольно размытой формулировкой, которые применяются очень ситуативно.
модуль должен делать что-то одно
Вроде как сообщество пришло к консенсусу, что SRP про то, что у класса должна быть одна причина для изменений. А мы опять почему-то возвращаемся к определению десятилетней давности.
Ну вот сделали вы ради соблюдения SRP условный UserRepository. Спустя какое-то время там будет целая пачка методов (Create, Update, Delete и пр.). Это явно нарушает ваш SRP, потому что теперь класс не делает что-то одно. Волнует ли это кого-то в сообществе? Практически никого. Почему здесь мы вдруг обязаны опираться на SRP?
Каким образом вы натянули принцип подстановки Барбары-Лисков на язык без "полноценного" наследования, я вообще не понял.
Сдается мне под, говоря про SRP вы имеете ввиду ISP. Поскольку SRP про то, за что отвечает модуль/класс
А LSP как раз про гранулярность интерфейсов.что любая функция, принимающая интерфейс, должна корректно работать с любым объектом, реализующим его. Ну нет в го полноценного наследования, что ж, делаем интерфейсы специфичнее (см ISP).
Какой смысл оценивать нужность какого-то подхода именно через SOLID? Это набор правил с довольно размытой формулировкой, которые применяются очень ситуативно.
SOLID - это своего рода костыль, который помогает расти начинающим. Мне эти правила в свое время сильно помогли.
1) программист (второй) вообще не должен ничего знать про БД,
он должен вызвать функцию Read(ID) и оно само вернёт нужный объект-модель из БД,
а для этого первый программист должен правильно постараться сделать функции CRUD-операции
2) уже есть кодогенератор который сам напишет все CRUD-операции,
и даже полностью готовый микросервис с этими функциями
https://github.com/ManyakRus/crud_generator
Используем sqlc в Го: нужно ли делать отдельный слой «репозиторий», или достаточно сгенерированного?