Ho due forms, forma A e forma B. Queste forms devono differire in apparenza, ma condividono molta logica. Il problema è che questa logica è legata all’aspetto (convalida sul clic del pulsante, eventi in corso di triggerszione, ecc.). Ad esempio, ho un campo nome e quando si preme il pulsante Salva, devo triggersre un evento che fa sì che il modulo padre convalidi il nome del record per evitare duplicati. Entrambe le forms hanno bisogno di questa logica, ma i loro pulsanti di salvataggio si trovano in posizioni diverse, e il tooltip che viene mostrato quando si verifica un errore deve anche apparire in un posto diverso. Questo è solo un esempio, ma qualcuno sa di un modo in cui posso evitare di copiare e incollare il codice qui? Forse mi manca qualcosa di ovvio …
È ansible creare un object con dati rappresentati in entrambi i moduli e inserire la logica di convalida in quell’object. Il livello di presentazione dovrebbe popolare quell’object con i dati immessi, chiedere all’object di convalidare se stesso e quindi gestire gli errori di convalida in un modo specifico del modulo.
Se la logica comune è relativa all’interfaccia utente, è necessario creare una class di modulo personalizzata (che erediti dalla class Form) con la logica desiderata. allora tutto ciò che devi fare è ereditare quella class nelle tue forms.
Se la logica comune è meno legata all’interfaccia utente, crea una class interna che incapsula la logica comune e chiamala da entrambe le forms.
È necessario aggiungere un controller tra le 2 viste e il modello condiviso. In questo modo devi solo fare: myController.save (); invece di chiamarti object modello per salvarli in entrambe le winform.
Ci sono alcuni modi in cui posso pensare di refactoring queste forms per condividere la logica. Potresti usare uno o più di questi in congiunzione:
Potresti anche dare un’occhiata al CSLA Framework , l’ho usato con successo in progetti passati per aiutare a ridurre la quantità di codice duplicato tra diverse UI. Sfrutta le capacità di database di .NET, ma non penso che sia necessario utilizzare il databinding per ottenere il massimo dal framework.