Ho una form che deve fare questo (visione semplificata ma la sostanza è questa) ascoltare su una socket per ricevere una serie di stringhe, fare un lookup in database per ogni stringa e mostrare dei dati all'utente. Il programma ha una MDI, l'utente apre la form X e quando arrivano i codici sulla socket vengono visualizzati, se la form X non è aperta non viene visualizzato nulla.
Il cliente dopo avere visto il tutto funzionare fa la seguente richiesta di modifica: fare si che il programma MDI ascolti sempre nella socket, alla prima stringa che arriva se la form non è aperta la si apre automaticamente. Immaginate cosa succede se si fa il solito calderone con tutto il codice nel code behind della form, mi vengono in mente i seguenti problemi.
- Il codice di connessione con la socket è nella form, va spostato con copia ed incolla (orrore) o rifattorizzato in un componente per far si che anche la form MDI riceva le stringhe quando la form X è chiusa.
- Quando la form mdi riceve una stringa controlla se la form X è aperta, se non è aperta la apre, ma il primo codice che è stato ricevuto dalla MDI non verrà ricevuto dalla form, e cosa succede ai codici che arrivano mentre la form si apre? (possono arrivare blocchi di decine di codici in millisecondi)
- Quando la form si apre la MDI deve rilasciare la socket e far si che da quel momento in poi sia la form X a ricevere i dati....problemi di sincronia?
Poi boh…forse succederebbero altri casini e dico succederebbero Perche la mia struttura è un MVC con vista completamente passiva, per cui io ho semplicemente preso il mio controller della form X che contiene tutta la logica, lo inizializzo automaticamente con una form dummy che internamente alla prima chiamata del metodo ShowData() inizializza una form reale, la mostra e buonanotte. In sostanza ho un proxy della view che crea in maniera Lazy la vera form da visualizzare all'utente, non ho toccato la logica del controller per cui tutto funziona. Ho fatto in 10 minuti e sono contento :D :D
Alk.