Я пытаюсь реализовать отдельный модуль навигации для навигации между android библиотечными модулями, уделяя особое внимание масштабируемости, возможности повторного использования и независимости от модулей. Моя архитектура приложения похожа на этот пример:
Мой текущий подход
1- Определить NavigatorInterface
для каждой библиотеки
2- Реализуйте каждый NavigatorInterface
в NavigationModule
. (модуль навигации ofcourse будет знать обо всех остальных модулях библиотеки, но это не имеет значения, поскольку он не будет использоваться повторно)
Ниже приведен пример кода для моей вышеупомянутой архитектуры:
: auth
| - LoginActivity
| - RegistrationActivity
| - AuthNavigator
public class LoginActivity extends AppCompatActivity {
private NavigatorCoordinator navigator; // how do I achieve this injection, without using Dagger etc.
.....
private void signup(){
navigator.NavigateToSignup(this);
}
private void profile(){
navigator.NavigateToProfile(this);
}
.....
}
public class SignupActivity extends AppCompatActivity {
private NavigatorCoordinator navigator; // how do I achieve this injection, without using Dagger etc.
.....
private void login(){
navigator.NavigateToLogin(this);
}
private void profile(){
navigator.NavigateToProfile(this);
}
.....
}
public interface AuthNavigator {
void NavigateToLogin(Context context);
void NavigateToRegister(Context context);
}
: профиль
| - ProfileActivity
| - ProfileNavigator
public class ProfileActivity extends AppCompatActivity {
private NavigatorCoordinator navigator; // how do I achieve this injection, without using Dagger etc.
.....
private void about(){
navigator.NavigateToAbout(this);
}
.....
}
public interface ProfileNavigator {
void NavigateToProfile(Context context);
}
: около
| - AboutActivity
| - AboutNavigator
public class AboutActivity extends AppCompatActivity {
private NavigatorCoordinator navigator; // how do I achieve this injection, without using Dagger etc.
.....
private void profile(){
navigator.NavigateToProfile(this);
}
.....
}
public interface AboutNavigator {
void NavigateToAbout(Context context);
}
Вышеупомянутый подход - попытка устранить круговую зависимость внутри одного и того же модуля :auth
, а также между двумя модулями :profile
& :about
. Ниже приведена реализация :navigation
.
: навигация
| - Навигатор
public class Navigator implements AuthNavigator, ProfileNavigator, AboutNavigator {
@Override
public void NavigateToLogin(Context context) {
context.startActivity(new Intent(context, LoginActivity.class));
}
@Override
public void NavigateToSingup(Context context) {
context.startActivity(new Intent(context, SignupActivity.class));
}
@Override
public void NavigateToProfile(Context context) {
context.startActivity(new Intent(context, ProfileActivity.class));
}
@Override
public void NavigateToAbout(Context context) {
context.startActivity(new Intent(context, AboutActivity.class));
}
}
Вопросы:
1 - Мне кажется, мне нужно реализовать модуль NavigatorCoordinator
in :navigation
, но как мне это сделать? Любой пример для этой реализации?
2- Как мне внедрить зависимость NavigatorCoordinator
в каждом классе деятельности, находящемся в разных modules
, без использования Deggar или какой-либо другой инфраструктуры? Можем ли мы сделать это с помощью класса Application
, если да, приведите пример реализации?
3- Как настроить действие Launcher
из любой библиотеки, например: LoginActivity
?
4- Как вызвать модуль :navigation
из модуля :app
таким образом, чтобы он запускал заданное действие c, например: ProfileActivity
?
5- Это хороший межмодульный навигационный подход для достижения возможности повторного использования, масштабируемости и разделения проблем?
6- Существуют ли другие подобные и хорошие подходы? Есть примеры кода? Ссылка на статью?
PS: Пожалуйста, не говорите мне использовать компонент архитектуры навигации.