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 :

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() { /* ... */ }
}
Mon interface à implémenter pour chaque splash screen
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public interface ISplashScreenView
{
    void UpdateView();
}
Ma classe Presenter :

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; }
}
Une des UI :

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() { /* ... */ }
}
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...

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?