Jak dzielić program na pakiety?

0

W teorii dzielić tak by klasy w pakecie używały się często nawzajem i rzadko używały klasy z innych pakietów.
Inna porada to ,że trzeba dzielić tak by uwzględniać, że zmiana 1 klasy pociąga za sobą "release" całego pakietu.
Czytałem też o podejściu strukturalnym do pakietowania i funkcjonalnym i że to drugie podobno lepsze.

No to teraz praktyka:

Załóżmy, że mam robota internetowego, który śledzi 2 fora naraz. Wyszukuje w nich posty w których ktoś pisze o R i zlicza pozytywne określenia i negatywne i wypluwa stosunek pozytywnych do negatywnych. Załóżmy, że mam klasy takie o (obok napisane co robią):

*Site* - klasa abstrakcyjna, przechowuje stornę główną, taki nawigator dla tematów na forum, zwraca wątki tematów ze słowem R
Site4programmers - dziedziczy po Site, działa na naszym forum
SiteCodercity - dziedziczy po Site, działa na forum codercity

*Topic* - klasa abstrakcyjna, przechowuje wątek z forum, zwraca stronę ze słowem R z wątku którym jest
Topic4programmers - dziedziczy po Topic, działa na naszym forum
TopicCodercity - dziedziczy po Topic, dziala na forum codercity

*Page* - klasa abstrakcyjna, przechowuje stronę wątku, zwraca posty ze słowem R ze strony , którą jest
Page4programmers - dziedziczy po Page, działa na naszym forum
PageCodercity - dziedziczy po Page, dziala na forum codercity

*Post* - klasa abstrakcyjna, post strony, zwraca zawartość postów
Post4programmers - dziedziczy po Post, działa na naszym forum
PostCodercity - dziedziczy po Post, dziala na forum codercity

Counter - interfejs do zliczania dobrych/zlych przymiotników
CounterBad - implementuje Counter, zlicza złe przymiotniki o R
CounterGood - implementuje Counter, zlicza dobre przymiotniki o R
AppMain - metoda główna, która używając tyhc klas robi analizę i wyswietla wynik

czyli, żeby AppMain przeprowadził analizę potrzebuję po kolei stworzyć sobie Site, który zwróci wiele Topic, z których każdy zwróci wiele Page i każdy Page zwróci wiele Post, a z każdego postu zawartość na której zapuści się algorytm z Counter.

Jak to teraz podzielić na pakiety? 4pgorammers do 1 pakietu, a codercity do 2, a czesci wspolne do 3?
A może strony ze stronami, posty z postami itd... A może wszystko razem tylko końcową analizę do osobnego pakietu?

0

Naturalne dla mnie jest to rozwiązanie:
"4pgorammers do 1 pakietu, a codercity do 2, a czesci wspolne do 3".

R jest lokalnie zwarta.

(Wrzucam Ci od razu złośliwy przypadek testowy).

0

czyli klasy abstrakcyjne do pakietu 3 wspólnego?

A może klasy abstrakcyjne i interfejsy dla 4programmers i codercity do pakietu nadrzędnego w którym będzie pakiet 4programmers i codercity oraz pakiet analiza? czy może pakiet analiza też do nadrzędnego razem z abstrakcyjnymi klasami?

2

Tu niestety wsio rybka. W javie w zasadzie nie ma pakietów nadrzędnych i podrzędnych. Wszystkie są niezależne. To nie Scala.
Zobacz jak Ci wygodnie. Ale na pierwszy ognień bym zrobił tak:

pl.otkuje.o.r  
pl.otkuje.o.r.4programmers
pl.otkuje.o.r.codercity 

Czyli co nie specyficzne dla jakiejś strony wpada do głownego.. i
dopiero jak się za dużo znajdzie tam znajdzie to wydzielaj jakieś analiza itp.

0

Praktyczny problem.

Kontynuuję dalej temat web miningu. Niech web crawling oznacza pobieranie danych z internetu, a web scrapping wyłuskiwanie specyficznych danych z tego co web crawler wyrzuci i transformowanie ich.

2 projekty.
Projekt nr 1 - zliczanie użytych słów i rysowanie word cloudera w wybranym wątku na forum 4programmers, ale tylko przymiotników oceniających R.
Projekt nr 2 - przeszukiwanie nowych postów na forum giełdowym co 1 minutę i wyrzucanie alerta jeśli ktoś napisze posta używając słowa kluczowego ustawionego przez użytkownika np. "KGHM".

Jak to teraz porobić mądrze by projekt 2 korzystał ze zdobyczy projektu 1?

W 1 projekcie mam klasy abstrakcyjne, które są szkieletem web scrappera. Mam też klasy implementujące ten szkielet w pakiecie 4programmers. Poza tym pakiet ze scrapperem do specyficznego problemu - spośród postów wyrzuconych przez crawlera, scrapper wyszukuje tylko posty o R i pobiera same przymiotniki oceniające R.

.

Może przy 2 projekcie przekipować se chamsko projekt 1 i dopisać w nim pakiet implementujący crawlera i scrappera dla projektu 2?

oznaczenia:
folder A| 						| folder podrzędny A
		| folder B porzędny A 	| folder C podrzędny B
		| 						| folder D podrzędny B
		| folder E podrzędny A	| folder F podrzędny E
itd...

~~ klasa abstrakcyjna



Folder	   	| Java project 		| Folder	| Pakiet 		| Klasa
-------------------------------------------------------------------------------
Web Mining 	| Scrapper 			| Scrapper	|				| ScrapperProject1.class
	   		|					|			|				| ScrapperProject2.class
	   		|					|			| Database		| SaverToMySQL.class ~~
	   		|					|			|				| SaverToMySQL4programmers.class
	   		|					|			|				| SaverToMySQLforum giełdowe.class
	   		|					| Crawler	| Abstract		| Page.class ~~
	   		|					|			|				| Topic.class ~~
	   		|					|			|				| Post.class ~~
	   		|					|			| 4programmers	| Page4programmers.class
	   		|					|			|				| Topic4programmers.class
	   		|					|			|				| Post4programmers.class
	   		|					|			| ForumGieldowe	| PageForumGieldowe.class
	   		|					|			|				| TopicForumGieldowe.class
	   		|					|			|				| PostForumGieldowe.class

Czy może szkielet z abstrakcyjnymi klasami zrobić osobnym projektem i potem 2 projekty będą go rozszerzać?

Folder      | Java project		| Folder	| Pakiet        | Klasa
-------------------------------------------------------------------------------
Web Mining  | Scrapper			|       	| Abstract      | Page.class ~~
            |                   |       	|               | Topic.class ~~
            |                   |       	|               | Post.class ~~
            |                   |       	|               | SaverToMySQL.class ~~
            | Project1 			| Scrapper	|               | ScrapperProject1.class
            |					|			|				| SaverToMySQL4programmers.class
            |                   | Crawler  	| 4programmers  | Page4programmers.class
            |                   |       	|               | Topic4programmers.class
            |                   |       	|               | Post4programmers.class
            | Project2 			| Scrapper	|               | ScrapperProject2.class    
            |                   |       	|               | SaverToMySQLforum giełdowe.class
            |                   | Crawler 	| ForumGieldowe | PageForumGieldowe.class
            |                   |       	|               | TopicForumGieldowe.class
            |                   |       	|               | PostForumGieldowe.class

A może robić contenty i dziedziczenia pierwszego projektu?

import project1.TopicProject1

public class PageProject2{
    public void myMethod(){
        PageProject1.myMethod();
        // do something more or in different way
    }
}
import project1.PageProject1

public abstract class TopicProject2 extends TopicProject1{

    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1