Jako model idealny wykorzystuję następujące kryteria (z podobnym uzasadnieniem, jak sugerował Martin Beckett, tj. Myślenie w kategoriach logicznej struktury, a nie w liniach kodu):
Zasada nr 1
Jedna klasa na plik (w C ++: jedna klasa -> jeden nagłówek i jeden plik implementacyjny).
Zasada 2
Siedem jest uważane za liczbę przedmiotów, które nasz mózg może obserwować w tym samym czasie bez pomieszania. Powyżej 7 trudno nam mieć przegląd tego, co widzimy. Dlatego: każda klasa nie powinna mieć więcej niż 7-10 metod. Klasa, która ma więcej niż 10 metod, jest prawdopodobnie zbyt złożona i powinieneś spróbować ją podzielić. Podział jest bardzo skuteczną metodą, ponieważ za każdym razem, gdy dzielisz klasę, zmniejszasz złożoność każdej z klas przynajmniej 2 razy.
Zasada 3
Ciało metody, które nie mieści się na jednym lub dwóch ekranach, jest zbyt duże (zakładam, że okno ekranu / edytora ma około 50 linii). Idealnie możesz zobaczyć całą metodę w jednym oknie. Jeśli tak nie jest, wystarczy przewinąć w górę i w dół, nie zapominając o części metody, która się ukrywa. Tak więc, jeśli musisz przewinąć więcej niż jeden ekran w górę lub w dół, aby przeczytać całą treść metody, Twoja metoda jest prawdopodobnie zbyt duża i łatwo możesz stracić ogólny przegląd.
Ponownie, dzielenie metod za pomocą prywatnych metod pomocy może bardzo szybko zmniejszyć złożoność metod (przy każdym podziale złożoność jest co najmniej o połowę). Jeśli wprowadzisz zbyt wiele metod pomocy prywatnej, możesz rozważyć utworzenie oddzielnej klasy do ich gromadzenia (jeśli masz więcej metod prywatnych niż publicznych, może druga klasa ukrywa się w twojej klasie głównej).
Łącząc te bardzo przybliżone szacunki:
- Maksymalnie jedna klasa na plik źródłowy.
- Maksymalnie 10 metod publicznych na klasę.
- Maksymalnie 10 metod prywatnych na klasę.
- Maksymalnie 100 linii na metodę.
Plik źródłowy zawierający ponad 2000 wierszy jest prawdopodobnie zbyt duży i zaczyna być zbyt nieuporządkowany.
To jest naprawdę bardzo przybliżony szacunek i nie przestrzegam tych kryteriów systematycznie (zwłaszcza, że nie zawsze jest wystarczająco dużo czasu na właściwe refaktoryzowanie). Ponadto, jak zasugerował Martin Beckett, są sytuacje, w których klasa jest dużym zbiorem metod i nie ma sensu rozdzielać ich w sztuczny sposób, aby zmniejszyć klasę.
Tak czy inaczej, z mojego doświadczenia wynika, że plik zaczyna być nieczytelny, gdy jeden z powyższych parametrów nie jest przestrzegany (np. Treść metody 300 linii, która obejmuje sześć ekranów, lub plik źródłowy zawierający 5000 linii kodu).