Наша структура выглядит следующим образом. .
источник (включает dao) > репо (включает исходный код) > usecase (включает репо)
Мой коллега считает, что необходимо выполнить сопоставление с доменом внутри источника, чтобы объект предметной области можно было передать на следующие уровни
Код: Выделить всё
class SomeSourceImpl(private val dao: Dao) : SomeSource {
override fun get(): Observable {
return dao.getResponse().map { it.mapToDomain() }
}
}
Это правило гласит, что источник зависимости кода могут указывать только внутрь.
Ничто во внутреннем круге не может ничего знать о чем-то
во внешнем круге. В частности, имя чего-либо, объявленного во
внешнем круге, не должно упоминаться в коде во внутреннем круге.
Это включает в себя функции и классы. переменные или любой другой поименованный
программный объект.
Я совершенно не согласен с подходом сопоставления с доменом непосредственно внутри источника, потому что тогда репозитории становятся анемичными, и, следовательно, мы принимаем анти-шаблон бесполезности анемичных репозиториев, и все, что они делают, — это слепо распространяют все, что поступает из источника. (Теперь вы можете сказать, что исходники тоже анемичны, и мы могли бы просто удалить их и включить объект dao непосредственно в репозиторий, но в нашем случае об этом не может быть и речи).
Вместо этого я предполагают, что источники будут возвращать необработанный объект базы данных (или удаленный объект, если мы используем вызовы rest), поскольку для источника имеет смысл возвращать необработанные данные для последующей обработки. Задача репозитория - получить результат из источника, затем сопоставить его с доменом и, наконец, распространить этот объект домена для использования примерно в таких случаях.
Код: Выделить всё
class SomeRepoImpl(private val someSource: SomeSource) : SomeRepo {
override fun get(haId: String): Observable {
return otherAssetSource.get().map { it.mapToDomain() }
}
Здесь
Здесь
Здесь
Вот и для iOS
Что бы было строго правило в принципах чистой архитектуры относительно места, где можно сопоставить сущность с объектом предметной области?
Подробнее здесь: https://stackoverflow.com/questions/703 ... chitecture