Przepraszam, ale muszę się nie zgodzić z większością innych odpowiedzi „tak, możesz” i powiedzieć, że:
Zniechęciłbym klasę, która nazywa jedną metodę publiczną inną
Istnieje kilka potencjalnych problemów z tą praktyką.
1: Nieskończona pętla w odziedziczonej klasie
Więc twoja klasa podstawowa wywołuje metodę1 z metody2, ale potem ty lub ktoś inny dziedziczy po niej i ukrywa metodę1 za pomocą nowej metody, która wywołuje metodę2.
2: Zdarzenia, rejestrowanie itp.
np. mam metodę Add1, która uruchamia zdarzenie „1 added!” Prawdopodobnie nie chcę, aby metoda Add10 wywoływała to zdarzenie, zapisywała dziennik lub cokolwiek innego, dziesięć razy.
3: gwintowanie i inne zakleszczenia
Np. InsertComplexData otwiera połączenie db, rozpoczyna transakcję, blokuje tabelę, a następnie wywołuje InsertSimpleData, otwierając połączenie, rozpoczyna transakcję, czeka na odblokowanie tabeli ...
Jestem pewien, że jest więcej powodów, jedna z pozostałych odpowiedzi dotyczy „edytujesz metodę 1 i dziwisz się, że metoda 2 zaczyna zachowywać się inaczej”
Ogólnie, jeśli masz dwie metody publiczne, które współużytkują kod, lepiej, aby obie wywoływały metodę prywatną, a nie jedną.
Edytować ----
Rozwińmy konkretny przypadek w PO.
nie mamy zbyt wielu szczegółów, ale wiemy, że funkcja ReverseData jest wywoływana przez moduł obsługi zdarzeń, a także metodę ScheduleTransmission.
Zakładam, że odwrotne dane również zmieniają wewnętrzny stan obiektu
Biorąc pod uwagę ten przypadek, uważam, że bezpieczeństwo wątków byłoby ważne, a zatem mój trzeci sprzeciw wobec tej praktyki ma zastosowanie.
Aby zapewnić bezpieczeństwo wątku ReverseData, możesz dodać blokadę. Ale jeśli ScheduleTransmission również musi być bezpieczny dla wątków, będziesz chciał udostępnić tę samą blokadę.
Najłatwiejszym sposobem jest przeniesienie kodu ReverseData na metodę prywatną i wywołanie go przez obie metody publiczne. Następnie można umieścić instrukcję blokady w metodach publicznych i udostępnić obiekt blokady.
Oczywiście możesz argumentować „to się nigdy nie wydarzy!” lub „Mógłbym zaprogramować blokadę w inny sposób”, ale najważniejszą kwestią dotyczącą dobrej praktyki kodowania jest dobre ustrukturyzowanie kodu.
W kategoriach akademickich powiedziałbym, że narusza to literę L na stałe. Metody publiczne są więcej niż publicznie dostępne. Można je również modyfikować przez jego spadkobierców. Twój kod powinien zostać zamknięty w celu modyfikacji, co oznacza, że musisz pomyśleć o tym, co robisz w metodach publicznych i chronionych.
Oto jeszcze jedna: potencjalnie naruszasz DDD. Jeśli twój obiekt jest obiektem domeny, jego publicznymi metodami powinny być Warunki Domeny, które coś znaczą dla firmy. W tym przypadku jest bardzo mało prawdopodobne, aby „kupić tuzin jaj” jest tym samym, co „kupić 1 jajko 12 razy”, nawet jeśli zaczyna się w ten sposób.