Mam problem z tym, ze nie wiem kiedy rozbic metode na mniejsze. Jakos tego nie 'widze'. Czesto robie cos na czuja a potem okazuje sie, ze w ksiazce jest inaczej. Czy jest jakis schemat, ktory mowilby kiedy powinno sie ja rozbijac?
Przyklad:
Kazdy gracz ma karty. Jesli ma grupe 4 kart o tej samej wartosci, to zabiera mu sie je i dodaje 1 punkt. Klasa Deck jest to klasa zestawu kart. Jest w niej metoda PullOutBooks()
ktora sprawdza czy gracz ma grupe 4 kart. Jesli tak, to zabiera sie mu ja i zwraca ta grupe.
Sposob 1:
public IEnumerable<Values> PullOutBooks() {
List<Values> books = new List<Values>();
for (int i = 0; i < 12; i++) {
Values checkingValue = (Values)i;
if (HasBook(checkingValue)) {
books.Add(checkingValue);
DealValues(checkingValue);
}
}
return books;
}
public void DealValues(Values valueToDeal) {
for (int j = cards.Count - 1; j >= 0; j--) {
if (cards[j].Value == valueToDeal)
Deal(j);
}
}
public bool HasBook(Values value) {
int amount = 0;
for (int i = 0; i < cards.Count; i++) {
if (cards[i].Value == value)
amount++;
}
return amount == 4;
}
Metoda PullOutBooks
jest dosc czytelna. Sprawdzanie i wyciaganie zostalo rozbite na osobne metody. Jednak w zadnym innym miejscu te metody nie sa uzywane. Czy jest wiec sens rozbijac sie?
Druga opcja: Jest to to samo co wyzej, tylko metody nie zostaly rozbite.
internal IEnumerable<Values> PullOutBooks() {
List<Values> books = new List<Values>();
for (int i = 0; i < 12; i++) {
Values checkingValue = (Values)i;
int amount = 0;
for (int j = 0; j < cards.Count; j++) {
if (cards[j].Value == checkingValue)
amount++;
}
if (amount == 4) {
books.Add(checkingValue);
for (int j = cards.Count - 1; j >= 0; j--) {
if (cards[j].Value == checkingValue)
Deal(j);
}
}
}
return books;
}
```
Ktora wersja jest bardziej poprawna?