2012-08-23 18 views
5

Moja średnia klasa zawiera teraz około 500 linii kodu i około 50 metod. IDE to Eclipse, w którym zwróciłem "Save Actions", aby metody były sortowane alfabetycznie, pierwsze publiczne metody, a następnie prywatne. Aby znaleźć jakąś konkretną metodę w kodzie używam "Quick Outline". W razie potrzeby "Open Call Hierarchy" pokazuje sekwencję metod, które wywoływano jeden po drugim.Jak zorganizować kod źródłowy klasy w języku Java?

Takie podejście daje następujące korzyści:

  • mogę zacząć pisać nową metodę bez zastanowienia, gdzie umieścić go w kodzie, ponieważ po zapisać zostanie ona umieszczona przez Eclipse automatycznie odpowiednim miejscu.
  • zawsze znaleźć metody publiczne w górnej części kodu (nie trzeba przeszukać całą klasę dla nich)

Jednakże istnieją pewne wady:

Kiedy refactoring duży sposób na mniejsze Nie jestem zbytnio usatysfakcjonowany, że nowe prywatne metody są umieszczane w różnych częściach kodu i dlatego trochę trudno jest podążać za koncepcją kodu. Aby tego uniknąć, wymieniam je w jakiś dziwny sposób, tak aby były blisko każdego z nich, na przykład: showPageFirst(), showPageSecond() zamiast showFirstPage(), showSecondPage().

Być może istnieją lepsze podejścia?

+0

kasę http://www.amazon.com/Design-Patterns-Java -Software-Series/dp/0321333020 pomoże ci pisać oprogramowanie, które jest łatwiejsze w utrzymaniu i udostępnianie innym –

Odpowiedz

3

Dobrze, nazywając swoje metody tak, że będą one łatwiejsze do wykrycia w swoim IDE nie jest naprawdę dobra. Ich imię powinno odzwierciedlać to, co robią, nic więcej.

Jako odpowiedź na pytanie, prawdopodobnie najlepszą rzeczą do zrobienia jest podzielenie klasy na wiele klas i wyizolowanie grup metod, które mają coś wspólnego w każdej z takich klas. Na przykład, jeśli masz

public void largeMethodThatDoesSomething() { 
//do A 
//do B 
//do C 
} 

który wtedy już refactored takie, że:

public void largeMethodThatDoesSomething() { 
doA(); 
doB(); 
doC(); 
} 

private void doA() {}; 
private void doB() {}; 
private void doC() {}; 

można dokonać klasy o nazwie SomethingDoer gdzie miejsce wszystkich tych 4 metods a następnie użyć instancji, że klasa w twojej oryginalnej klasie.

+0

Czy nie jest dobrze, aby zwiększyć liczbę klas w pro ject? Pamiętam, że w Poradniku Java ostrzegali, aby nie zwiększać liczby klas w sposób niekontrolowany, ponieważ może to wydłużyć czas rozruchu? http://docs.oracle.com/javase/tutorial/uiswing/events/generalrules.html#innerClasses – Aleksey

+0

Tak, wiem, co masz na myśli, byłem również na drodze. Istnieje nawet strona z Poradami dotyczącymi wydajności dla Androida (przy użyciu Javy), która mówi, że nie tylko tworzysz kilka klas, ale także unikasz metod na rzecz pól publicznych, unikasz dziedziczenia i wywołań polimorficznych, ponieważ to powoduje dodatkowe opóźnienie nano i pętla gry, które są krytyczne. Jednak przejście na skrajności spowoduje nieporęczny i trudny do utrzymania kod. Spróbuj kodować poprawnie i czysto z oddzielnymi klasami jako metodami zgodnymi z programowymi potrzebami biznesowymi ... –

+0

... jeśli to konieczne, zrób profil aplikacji, sprawdź, czy jest kod generujący szyjki wydajności i spróbuj tylko zoptymalizować tę część, jest mniej estetyczny, ale bardziej wydajny. Zaufaj mi, pisząc od podstaw z myślą TYLKO o wydajność i nic więcej nie wpędzi cię w kłopoty. –

1

Porządkowanie tak, jak opisałeś, brzmi lepiej niż 99% kodu Java, który widziałem do tej pory. Jednak z drugiej strony, upewnij się, że twoje zajęcia nie rosną zbyt wiele i metody nie są ogromne.

Ćwiczenia powinny być zazwyczaj mniej niż 1000 linii i metody mniej niż 150.

3

Nie przejmuj się fizycznym zamawianiem swoich metod w klasie, jeśli nie możesz tego zobaczyć, po prostu użyj Ctrl-O i zacznij wpisywać nazwę metody, a przejdziesz od razu do niej.

Posiadanie samoopisujących się nazw powoduje, że kod jest łatwiejszy w konserwacji niż sztucznie nazywane, aby zachować je w kolejności alfabetycznej.

Podpowiedź: nauczyć swoich klawiszy skrótów i będzie można poprawić swoją produktywność

4

Zorganizuj swój kod do swoich odbiorców.Na przykład klasa w bibliotece może mieć tych odbiorców:

  1. Klient API, który chce uzyskać więcej informacji na temat działania metody publicznej.
  2. Opiekun, który chce znaleźć odpowiednią metodę dokonania niewielkiej zmiany.
  3. Bardziej poważny opiekun, który chce dokonać znaczącego refaktoryzacji lub dodać funkcjonalność.

Klienci chcący zapoznać się z kodem źródłowym, chcą wprowadzić podstawowe pojęcia. Najpierw mamy komentarz do klasy, który zawiera glosariusz ważnych terminów i przykładów użycia. Następnie mamy kod związany z jednym terminem, a następnie z innym, a następnie z trzecim.

Dla opiekunów każda para metod, które prawdopodobnie będą musiały ulec zmianie, powinna znajdować się w pobliżu. Publiczna metoda i jej prywatny pomocnik oraz wszelkie związane z nią stałe powinny pojawić się razem.

Obie te grupy użytkowników są wspomagane poprzez grupowanie członków klasy w logiczne sekcje, które są oddzielnie dokumentowane.

Na przykład, klasa kolekcji może zawierać kilka głównie ortogonalnych problemów, które nie mogą być łatwo podzielone na oddzielne klasy, ale które można podzielić na osobne sekcje.

  1. mutatorów
  2. Akcesory
  3. Iteracja
  4. szeregowania i toString
  5. Równość, porównywalność, mieszania