Salut à tous,

je refactor une app dans laquel j'essai d'alléger un peu les activities.
Mon but est de ne garder dans les activity que ce qui concerne le graphique (apparition/disparition de vue , changement de texte, animation, etc ...) et d'avoir à coté un controller qui va venir gérer toute la logique liée à la vue. J'ai ensuite tout un tas de classe métier que je considère comme les modèles.

Activity :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {
 
    private MainController mController;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mController = new MainController(this);
 
    }
 
    public void showToast() {
        Toast.makeText(this, "message", Toast.LENGHT_SHORT).show();
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MainController {
 
    private final WeakReference<MainActivity> mActivityRef;
 
    public MainController(MainActivity activity) {
        mActivityRef = new WeakReference<>(activity);
    }
 
	public void doSomething()
	{
		//Traitement
		if(mActivityRef != null) {
			final LoginActivity activity = mActivityRef.get();
			activity.showToast();
		}
	}
 
}
- Que pensez vous de cet implémentation ? On est pas dans le MVC "pure tradition" mais l'idée me plait bien , c'est assez léger à mettre en place.
- J'ai opté pour une weakreference de l'activity dans le controller , mais je ne suis pas certains que ce soit nécessaire. Avis ?

J’accroche pas aux architecture MVVM ou MVP qui rajoute trop de classe/code à mon gout.