Size: a a a

2020 June 06

Н

Никита in Go-go!
/dev/null
main не должен быть у вас в каждом пакете
Это я уже понял
источник

AK

Anton Kucherov in Go-go!
storage.Storage - выглядит странно, вот notes.Storage который лежит внутри пакета notes, который используется там же, а реализуется пакетом redis (к примеру) я бы еще понял
источник

Н

Никита in Go-go!
Anton Kucherov
storage.Storage - выглядит странно, вот notes.Storage который лежит внутри пакета notes, который используется там же, а реализуется пакетом redis (к примеру) я бы еще понял
Методы для работы с конкретной сущностью в БД ведь используются не только в одноименных юзкейсах. На примере уведомлений – они могут создаваться с юзкейсов создания поста, либо добавление друга. Либо комментарии. Их список может потребоваться в методе вывода поста.
источник

/

/dev/null in Go-go!
V L
Интерфейс отвечает за действие, так что вам бы подошли NotesSaver, NotesReader
Извините что придираюсь но:
Интерфейс описывает поведение.
источник

VL

V L in Go-go!
/dev/null
Извините что придираюсь но:
Интерфейс описывает поведение.
Да, правильно придираетесь
источник

VL

V L in Go-go!
Никита
Методы для работы с конкретной сущностью в БД ведь используются не только в одноименных юзкейсах. На примере уведомлений – они могут создаваться с юзкейсов создания поста, либо добавление друга. Либо комментарии. Их список может потребоваться в методе вывода поста.
Один убер класс всегда сложнее и менее поворотлив, чем несколько небольших.
источник

AK

Anton Kucherov in Go-go!
Никита
Методы для работы с конкретной сущностью в БД ведь используются не только в одноименных юзкейсах. На примере уведомлений – они могут создаваться с юзкейсов создания поста, либо добавление друга. Либо комментарии. Их список может потребоваться в методе вывода поста.
Если говорить о Clean, интерфейсы как в примере выше проектируются (под бизнес юзкейс) и лежат в слое высокого уровня, и используются там же. А их реализации находятся в слое нижнего уровня (В пакете с БД). И именно пакет БД должен реализовывать бизнесовые интерфейсы а не наоборот.
источник

Н

Никита in Go-go!
V L
Один убер класс всегда сложнее и менее поворотлив, чем несколько небольших.
Это да. Можно разбить Storage на несколько структур по их зоне ответственности, и встроить их. Как в интерфейсе
источник

Н

Никита in Go-go!
Anton Kucherov
Если говорить о Clean, интерфейсы как в примере выше проектируются (под бизнес юзкейс) и лежат в слое высокого уровня, и используются там же. А их реализации находятся в слое нижнего уровня (В пакете с БД). И именно пакет БД должен реализовывать бизнесовые интерфейсы а не наоборот.
Что вы имеете ввиду под бизнесовыми интерефейсами?
источник

VL

V L in Go-go!
Никита
Что вы имеете ввиду под бизнесовыми интерефейсами?
Начните с того, что посмотрите выступления Роберта Мартина про чистую архитектуру на ютубе.
источник

Н

Никита in Go-go!
V L
Один убер класс всегда сложнее и менее поворотлив, чем несколько небольших.
Хотя тут проблема будет в другом: в каждый отдельный класс надо прокидывать те же самые поля
источник

Н

Никита in Go-go!
Смотрите, я не пытаюсь тут реализовать то, о чем говорит Мартин. Я пытаюсь понять, что плохого в архитектуре той, которая сейчас есть на примерном проекте. Какие конкретно минусы
источник

Н

Никита in Go-go!
Потому что архитектур много – почему сразу не DDD взять? Либо еще какую-то. Вопрос не в этом.
источник

Н

Никита in Go-go!
Если вообще брать реальные рабочие проекты: я пишу на Пайтоне на работе, и абсолютное большинство проектов это где взяли Джанго и погнали. Ни о какой архитекутре речи и нет.
источник

VL

V L in Go-go!
Никита
Смотрите, я не пытаюсь тут реализовать то, о чем говорит Мартин. Я пытаюсь понять, что плохого в архитектуре той, которая сейчас есть на примерном проекте. Какие конкретно минусы
Плохо то, что контроллер зависит от реализации хранилища, а не сам определяет через интерфейс какое хранилище ему нужно.
источник

Н

Никита in Go-go!
V L
Плохо то, что контроллер зависит от реализации хранилища, а не сам определяет через интерфейс какое хранилище ему нужно.
То есть вынести интерфейс хранилища туда, где контроллер?
источник

AK

Anton Kucherov in Go-go!
Никита
Смотрите, я не пытаюсь тут реализовать то, о чем говорит Мартин. Я пытаюсь понять, что плохого в архитектуре той, которая сейчас есть на примерном проекте. Какие конкретно минусы
Минусы такие же как в любом классическом MVC Web фреймворке. Самый очевидный, искажение концепции MVC пришедшей из SmallTalk и UI разработки. Со всеми вытекающими отсюда последствиями. Берем любой проект написаный на MVC веб фреймворке с 5 летней историей и выше и смотрим, что с ним случилось и как с этим жить. Там прямо с каждого файла они огромными глазищами на вас смотрят при любой попытке внести изменение
источник

Н

Никита in Go-go!
V L
Плохо то, что контроллер зависит от реализации хранилища, а не сам определяет через интерфейс какое хранилище ему нужно.
Ну и он не зависит от реализации. Будет там постгрес, монга, что либо. Методы останутся те же
источник

VL

V L in Go-go!
Не просто вынести, а  оставить только необходимый контроллеру интерфейс. Тогда вам будет легче написать юнит тест с моком на несколько методов, а не на весь storage.
источник

VL

V L in Go-go!
Никита
Ну и он не зависит от реализации. Будет там постгрес, монга, что либо. Методы останутся те же
Если вам нужно будет заменить хранилище на любое другое, то это новое хранилище будет зависеть от интерфейса старого, а не от того интерфейса, что требует контроллер.
источник