У меня проблемы с использованием чистой архитектуры. Для тех из вас, кто прочитал сообщение блога Fernando Cejas http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/, мой вопрос основан на нем и его коде.Как реализовать одно-много отношений в чистой архитектуре
В своем примере проект имеет только один объект Domain a User. И все понятно с POJO. Там, где у меня проблема, скажем, что у пользователя есть книги. От одного до многих отношений. Как бы вы справились с этим в «Чистой архитектуре»?
Как и у меня, у меня есть несколько слоев, поэтому по 3 классам для объекта домена (User, UserModel, UserEntity) и репозитория на объект домена (UserDataRepository). Наш новый пример также будет иметь Book, BookModel, BookEntity и BookDataRepository.
У меня также есть классы использования с вариациями CRUD.
Проблема для меня - это уровень UI/Presenter. На данный момент в программе у меня есть объект UserModel AND список BookModels. У меня нет userModel.getBooks(). У меня нет userModel.save() (который также сохранил бы все изменения в книге).
Чтобы подчеркнуть проблему, чтобы сделать эту аналогию более похожей на мой фактический прецедент, у меня также есть список всех страниц в книгах! :) Поэтому, когда я сохраняю пользователя, я хочу сохранить книги и все страницы для каждой книги, которая могла быть изменена.
Как бы я это сделал?
Второй вопрос BONUS: В моей реальной проблеме, я имею классы, которые происходят из базового класса. Чтобы использовать вышеупомянутую аналогию: LeftPage и RightPage будут получены из PageBase. У книги есть список. Однако у LeftPage и RightPage есть свои отдельные репозитории, отдельные варианты использования и т. Д. (Но это не работает) Как сохранить список? Должен ли я сделать отдельный SavePages прецедентов, которые будут иметь:
если (pages.elementAt (я) InstanceOf LeftPage) { SaveLeftPage saveLeft = новый ..... } еще { SaveRightPage saveRight = новый ..... }
Я не думаю, что могу использовать полиморфизм, потому что во всей документации, которую я видел, модели не знают о случаях использования.
Я надеюсь, что вы можете помочь, спасибо вам большое за ваше время :)
-Mike
Спасибо за ваш ответ. Да, я знаю, что это дядя Боб :) Я имею в виду версию г-на Седжаса по двум причинам: а) я делаю приложение для Android и б) приведенный выше текст - это просто редактирование письма, которое я ему отправил , :) Специфика прецедента не имеет значения, существует много вариантов использования. Важно то, что данные. Например, я могу получить пользователя из репозитория пользователя. Но тогда можно было бы ожидать выполнения user.getBooks() (синхронно). Затем с возвращенной книгой сделайте book.getPage() (опять же, синхронно). Каков правильный дизайн, чтобы сделать это возможным? – MikeWallaceDev
Не уверен, понял ли я. Вы хотите что-то похожее на ленивую загрузку? Сначала загрузите основной объект и загрузите дочерние объекты по запросу (getBooks())? – jaimetotal
Нет, я пытаюсь понять правильный способ перестроить эту древовидную структуру. Вся документация/примеры работают с простыми POJO. И я это понимаю. Но ничего не показывает, как работать с объектами, родившими-> детьми. Используя знания из документации, у меня будет объект User и * рядом с ним - еще один объект списка типов. Я не знаю, как правильно построить объект User, у которого есть дочерний список . –
MikeWallaceDev