Bonjour,
dans un avenir proche, je dois développer plusieurs applications (en WinForms dans un premier temps et WPF dans un second).
Pour mes applications WinForms, je souhaite donc utilisé le pattern MVP pour une raison très simple, c'est plusieurs UI qui utilisent le même code métier.
Dans un premier temps, je suis sur l'application de chargement (un bête Splash Screen).
J'ai parcouru quelques articles sur le net mais tout ça me paraît encore bien mystérieux.
Les comportements que je souhaite définir pour l'UI du splash screen :
- se ferme automatiquement en cas de réussite ;
- ne se ferme pas en cas d'erreur ;
- affiche l'état d'avancement ainsi que divers messages.
J'ai donc mon code métier :
Mon interface à implémenter pour chaque splash screen
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // Throws *Exception public static class Business { public static void Update() { /* ... */ } }
Ma classe Presenter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface ISplashScreenView { void UpdateView(); }
Une des UI :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class SplashScreenPresenter { private ISplashScreenView _view; public SplashScreenPresenter(ISplashScreenView view) { _view = view; // Lancement de la mise à jour try { CanClose = false; Business.Update(); } catch(Exception ex) { ErrorMessage = ex.Message; } finally { CanClose = true; } } public string CanClose { get; internal set; } public string ErrorMessage { get; internal set; } public string Message { get; internal set; } public int Percentage { get; internal set; } }
Mais là je sèche, en effet, c'est mon code Business qui détient les messages à affecter et le taux d'avancement, ce qui impliquerait que je passe ma classe Presenter à ma classe Business...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public partial class SplashScreen : Form, ISplashScreenView { private void SplashScreen_Load(object sender, EventArgs e) { new SplashScreenPresenter(this); } public void UpdateView() { /* ... */ } }
C'est bien comme ça qu'il faut procéder? Y a-t-il des failles dans mon système (sûrement)?
Comment implémenter la gestion des events? (Dire à l'UI de quitter ou non), ...
Le Presenter doit-il implémenter INotifyPropertyChanged?
![]()
Partager