Mam trochę kodu, który jest prawie identyczny, ale używa absolutnie różnych typów, bez dziedziczenia między nimi, na głównej zmiennej. W szczególności piszę analizator z Roslyn dla C # i VB.NET, z następującymi typami:
Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeSyntax
Zastanawiam się, czy, ponieważ kod robi to samo, powinienem zachować jak najbardziej OSUSZANIE, dzieląc jak najmniej na osobne (ale identyczne inne niż typ) metody, czy też całkowicie oddzielić, ponieważ te dwie metody są niezwiązane i przyszłe zmiany mogą zmusić jedną wersję do zmiany, ale nie drugą (chociaż jest to mało prawdopodobne)?
Edycja: Mniej więcej rok później trafiłem na ten sam problem, a zespół Roslyn pomógł mi go rozwiązać: napisz klasę podstawową, która przyjmuje ogólne i ma TAttributeSyntax
parametr, który wykonuje większość pracy. Następnie napisz klasy pochodne z absolutnym minimum danych, które wymagają określonego typu.
Odpowiedzi:
Nie suszysz, ponieważ ktoś napisał to w książce, w której warto to robić, robisz SUCHANIE, ponieważ w rzeczywistości przynosi wymierne korzyści.
W szczególności z tego pytania:
Zasadniczo więc nie myśl „och, ten kod jest dość podobny, może powinienem zreformować się, żeby się nie powtarzać”. Pomyśl „czy refaktoryzacja, aby ta podstawa kodu ponownie wykorzystywała wspólne elementy, sprawia, że kod jest łatwiejszy w utrzymaniu, czy mniej ?” Następnie wybierz ten, który sprawia, że jest łatwiejszy w utrzymaniu.
Biorąc to pod uwagę, biorąc pod uwagę SRP i po prostu próbując ogólnie mieć małe, elastyczne klasy, sensowne może być przeanalizowanie kodu z tego powodu , podzielenie fragmentów zachowań, które używają typów ogólnych (mówiłeś, że są one identyczne inne niż typ) na małe klasy. Następnie dowiesz się, że niektóre z tych klas są całkowicie identyczne (nie tylko w większości identyczne), a następnie możesz zbudować zestaw narzędzi na wypadek, gdybyś chciał je dodać
Microsoft.CodeAnalysis.CPlusPlus.Syntax.AttributeSyntax
.źródło