Zmagam się z sytuacją, która pojawia się raz po raz, ale nie jestem pewien, czy sposób, w jaki robię, jest zły, czy też mogę robić rzeczy w inny sposób.Używanie formularza Windows jako klasy abstrakcyjnej - jakiego wzoru użyć?
Przykład:
Mam Windows formularz z DataGridView z niektórych metod prywatnych sprawdzania poprawności DataGrid i interpretowania prawym przyciskiem myszy na DataGridView itd. Ta forma okna jest zasadniczo „streszczenie” class i nigdy nie jest tworzony bezpośrednio.
Następnie dziedziczę z tej klasy bazowej i dostosowuję ją na różne sposoby (wzorzec szablonu), np. zdefiniować kolumny datagridview i szczególne metody formatowania, które są specyficzne dla tych kolumn itp.
Kiedy zajmuję się tymi klasami, metody publiczne klasy podstawowej tworzą mój interfejs i mogę utworzyć konkretny typ danych datagridview, które chcę i nimi manipulować. przez wspólny interfejs. Śliczny.
Problem:
Głównym problemem jest to, że nie można właściwie zadeklarować klasę Form Windows jako abstrakcyjne bez powodowania projektanta Visual Studio rzucić niepewny, ponieważ nie można utworzyć wystąpienia tych klas abstrakcyjnych.
Niektóre rozwiązania:
W tej chwili jestem „wykonawczym” te metody w klasie bazowej, że chcę być nadpisane z:
throw new NotSupportedException();
tak przynajmniej jeśli zapomnę, aby zastąpić jeden te metody, które tworzą mój interfejs. Wydaje mi się to jednak dość śmierdzące i nie podoba mi się to.
Innym rozwiązaniem, z którym się zetknąłem, było całkowite usunięcie dziedzictwa i zdefiniowanie interfejsu (na przykład IMyDataGrid) i wdrożenie go w każdej klasie datagridview (rodzaj wzorca strategii). Problem polega jednak na tym, że tracisz zalety ponownego użycia kodu, które dziedziczenie daje ci sens, że musisz tworzyć wiele różnych formularzy, upuszczasz na nich widok datagridview - skutecznie kopiujesz i wklejasz ten sam kod do każdego z nich. Zły.
Czy istnieje lepszy sposób na próbę osiągnięcia tego?
Dlaczego nie odziedziczyć bezpośrednio z GridView i utworzyć formant do użycia w formularzu systemu Windows? – Macros