Kiberfilin / otusDz1

Homework 1
0 stars 0 forks source link

Dependency rule #3

Open antonkazakov opened 5 years ago

antonkazakov commented 5 years ago

https://github.com/Kiberfilin/otusDz1/blob/97dbba9e11302d2e7a73aa71bfbe45de0e7af38d/app/src/main/java/ru/cyber_eagle_owl/homework1/clean/data/repositories/PhotosRepository.kt#L26

Кажется что нарушается dependency rule из clean архитектуры. У тебя data слой знает про контракты domain слоя. К тому же если ты используешь корутины, кажется тебе не нужны gateways - которые являются простыми коллбеками, ты можешь иметь инстанс репозитория в своем интеракторе и вызывать его suspend геттеры.

Kiberfilin commented 5 years ago

Не понимаю про нарушение dependency rule. Имеется ввиду, что PhotosRepository.kt (который относится к data слою) знает про контракт PhotosRepositoryGetPhotosOutputPort (который относится к domain слою)? Dependency rule гласит: внутренние слои не должны зависеть от внешних. Data слой - внешний, по отношению к domain слою (https://habr.com/ru/company/mobileup/blog/335382/), поэтому data слой может знать о domain. К тому же я использую boundaries для обмена информацией между слоями, в данном случае это PhotosRepositoryGetPhotosOutputPort.

Про gateways немного не понял, что имеется ввиду под gateways?

Интерактор - это domain слой, репозиторий это data слой, data слой - внешний, по отношению к domain слою. То есть иметь инстанс репозитория (data слой) в интеракторе (который сам domain слой) без boundaries это будет нарушать dependency rule. Я конечно храню репозиторий в интеракторах, но делаю это безопасно - через boundaries, т.о. dependency rule не нарушается.