Я делаю базовое приложение, следуя чистой архитектуре, чтобы изучить его, и я не уверен, как реализовать вставку модели, когда необходим порядок вставки.
У меня есть «Событие», «Исполнитель»"," Реклама "сущность.- Событие есть у одного или нескольких артистов.- Исполнитель имеет одно или несколько событий.- У объявления есть одно событие и / или исполнитель.
Я получаю данные из файла Json онлайн, а затем мой адаптер отображает данные для моей модели слоя данных.Теперь у меня есть данные, которые мне нужно вставить, но, например, когда я вставляю рекламу, которая ссылается на исполнителя, мне нужно, чтобы артист был вставлен первым, чтобы внешний ключ объявления мог ссылаться на исполнителя, и мой вопрос: если я хочу вставитьили сохранить все данные одновременно, как соблюдать порядок вставки, чтобы избежать ошибки внешнего ключа?
Мое приложение отображает список рекламы в качестве первого просмотра.Мне удается сделать это с помощью insertTask в моем ArtistRepository (в доменном слое), который вызывает метод Insert моего рекламного репозитория в onPostExecute, но это, безусловно, неправильный способ, так как я вызываю метод репо из другого репо.
public class upsertFromServerAsync extends AsyncTask<Void, Void, JsonResponse> {
//My mapper
JsonResponse myResponse;
@Override
protected JsonResponse doInBackground(Void... voids) {
retrofit = RetrofitClient.getInstance();
apiService = retrofit.create(ApiService.class);
Call<JsonResponse> call = apiService.getJsonFromServer("yh4ra");
try {
//Getting my data
myResponse = call.execute().body();
//Inserting events
List<Event> events = myResponse.getEvents();
for (Event event : events) {
upsertEvent(event);
}
//Inserting artists
List<Artist> artists = myResponse.getArtists();
for (Artist artist : artists) {
upsertArtist(artist);
}
} catch (IOException e) {
e.printStackTrace();
}
return myResponse;
}
@Override
protected void onPostExecute(JsonResponse myResponse) {
super.onPostExecute(myResponse);
AsyncTask.execute(() -> {
List<Advert> advertsFromJson = jsonAdapter.getAdvertsFromJson(myResponse);
for (Advert advert : advertsFromJson) {
Log.d("test", advert.getArtistName() + "");
upsertAdvert(advert);
}
});
}
}
это решение беспорядок, в итоге у меня в EventRepo были методы upsertArtist и upsertAdvert.Каков хороший способ для достижения этого после чистой арки?Может быть, мне нужно использовать интерактор, который может вызвать несколько репо, чтобы поддержать мою модель?Спасибо