2010-07-29 12 views
5

Zostało mi zadane to pytanie: Nie byłem w stanie odpowiedzieć - Jakieś odpowiedzi tutaj?Co można powiedzieć o tej klasie java?

Co można powiedzieć o klasie java, która ma 1000 linii kodu, z 1-n metodami mającymi 100 linii i n + 1 do m metod mających 200 linii kodu?

Pomyślałem, że zajęcia powinny być w porządku, aby mieć 1000 linii kodu, a metody są również w porządku, aby mieć 100-200 linii kodu - więc nie odpowiedziałem, biorąc pod uwagę, że klasa jest całkowicie w porządku.

Czy są znane czasy kompilacji związane z liczbą linii, które ma klasa Java? lub metoda java ma? czy istnieją jakieś standardy - jeśli tak, jak można usprawiedliwić technicznie?

dziękuję!

+12

"metody są również w porządku, aby mieć 100-200 linii kodu" - er, nie. –

+4

Dla mnie metody dłuższe niż 40 linii są zdecydowanie nie w porządku, ale przynajmniej musi istnieć dobry powód. – MRalwasser

+0

Świetna odpowiedź społeczności java. Refaktoryzacja jest odpowiedzią. Dziękujemy wszystkim. – gekrish

Odpowiedz

14

Co można powiedzieć o tej klasie, że musi być refaktoryzowana. Ma zbyt wiele linii kodu na klasę i na metodę. Nie powoduje żadnych problemów technicznych, ale powoduje problemy z czytelnością i wsparciem.

4

Myślę, że głównym problemem nie jest wydajność podczas kompilacji. Klasa 1000 linii jest trudna do odczytania i zrozumienia.

Być może klasa powinna zostać rozłożona na inne klasy (lub podklasy, jeśli w twoim przypadku dziedziczenie jest bardziej wartościowe niż kompozycja), więc każda klasa ma ściśle określoną odpowiedzialność w systemie.

Ale nie mogę powiedzieć wiele na temat tego problemu, jeśli nie mogę zobaczyć implementacji klasy.

Istnieje wiele dobrych książek, które wyjaśniają, jak rozwiązać ten i inne problemy projektowe. Dwie dobrze znane książki to Code Complete 2nd Edition by Steve McConnell i Refactoring by Martin Fowler et al.

+0

+1 Za wspomnienie o problemie odpowiedzialności. – helpermethod

3

co przychodzi mi do głowy:

n = 0, m-n = 5 --> 5 methods 
n = 2, m-n = 4 --> 6 methods 
n = 4, m-n = 3 --> 7 methods 
n = 6, m-n = 2 --> 8 methods 
n = 8, m-n = 1 --> 9 methods 
n = 10, m-n = 0 --> 10 methods 

Cała reszta jest już wspomniano w innych odpowiedzi.

+0

Może to być klasa z 1000 konstruktorem linii i zerowymi metodami. – emory

+0

On o tym zapomniałem: P No dobrze, po prostu przyjmuję, że klasa to 1000 linii bez konstruktora (ów) =) – George

+0

... i pól ... i pustych linii ... i komentarzy . .. i wszystkie dekoracje (import, zdefiniuj, itp.) Wiele do przyjęcia, nawet sama deklaracja klasowa przyjmuje jedną lub dwie linie: P – nanda

1

Co można powiedzieć? No cóż, można powiedzieć, że liczba metod w tej klasie to: m < = 5 + n/2

0

Oznacza to, że mimo używania języka OOP, nadal kodowałeś tak, jak często robisz to w dowolnym z trywialny niestrukturalny język programowania.

2

Nie jest to czas kompilacji, o którym powinieneś wiedzieć, ale problem z konserwacją. Ostatnio miałem do czynienia z jeszcze gorszym problemem - przejąłem kod, w którym główna klasa miała około 6000 linii, z bardzo długimi metodami, zagnieżdżonymi pętlami i instrukcjami if itd. Zaufaj mi, to wymaga wysiłku, aby nowy programista zrozumiał, o co chodzi tam.

Idealnie każda klasa/metoda powinna mieć tylko jedną odpowiedzialność i wykonywać tylko jedno zadanie. Więc gdybym był tobą, zdecydowanie odpowiedziałbym, że ta klasa naprawdę musi być refaktoryzowana!

0

Można powiedzieć, że klasa jest kandydatem do refaktoryzacji. Ale oczywiście nie ma twardych i szybkich reguł dotyczących tego, jak duża powinna być klasa, ani jej metod.

0

1. Metody klasy są Kandydaci dla Refaktoryzacja

nie oznacza to metody powinny być automatycznie refactored. Istnieją uzasadnione przypadki, w których dobrze zaprojektowana metoda może mieć długość 100 lub nawet 200 linii. Rozważmy metodę implementującą wyższą funkcję matematyczną, która wykorzystuje duże tablice jako tabele przeglądowe w celu przyspieszenia przetwarzania dla typowych przypadków. Tablice te są całkowicie wewnętrzne dla treści metody, mogą obejmować wiele linii kodu, ale mogą w rzeczywistości znacznie zwiększyć złożoność metod. Te przypadki: itp.). Zrozumienie i zwrócenie uwagi na "przypadki narożnikowe", kiedy ta długość może być w rzeczywistości uzasadniona, i nie skakanie w prawo do dogmatycznych absolutów "zawsze, gdy coś jest X liniami, musisz musi zrobić Y" prawie na pewno będzie lepiej odzwierciedlać ciebie.

2. Klasa sama w sobie jest Kandydat dla Refaktoryzacja

Jak zauważył others istnieją żadne absoluty, jeśli chodzi o jak dużą klasa powinna być w zakresie linii kodu. Jednak Single Responsibility Principle mówi, że klasa powinna robić jedną rzecz dobrze i tylko jedną rzecz. Jest to rozsądne założenie, że ta klasa robi więcej niż jedną rzecz, opierając się wyłącznie na jej długości i że projekt będzie korzystał z rozbicia go na kilka mniejszych klas. Nie jest to jednak żadna gwarancja. Tysiąc wierszy nie jest absurdalnie długich i może być zasłużenie w niektórych przypadkach. Długość metod jest prawie zawsze większym problemem niż długość (w liniach kodu) klasy.

3. Wnioskowanie o zawartości CLASS w

Chociaż istnieje podejrzenie może być błąd w opisie OP problemu: metody 1-N mające 100 linii oraz n + 1 (uwzględnić jeśli n jest dodatnią liczbą całkowitą większą niż 1 --- kończy się ujemną liczbą metod 100 linii). Możesz rozpocząć rozumowanie na temat klasy, jeśli możesz wykonać szybkie obliczenia dotyczące liczby każdego typu metody.

Na przykład, jeśli 2 * a + b = 5 (gdzie jest # 100 metod liniowych i b jest # 200 metod liniowych), to wiesz, że cała klasa jest składa się tylko z tych metod, ponieważ całkowita liczba linii w nich wynosi = 1000. W takim przypadku wiesz, że klasa nie ma konstruktorów, pól lub inicjuje. Wiedząc to, każda metoda musi być static. Następnie masz klasę, która istnieje tylko po to, aby zapewnić pewne statyczne metody: brzmi jak klasa narzędzia/pomocnika dla mnie.

Znasz także rozmowę: jeśli 2 * a + b!= 5, klasa musi posiadać co najmniej jeden blok pola, konstruktora lub inicjalizatora.

Powiązane problemy