🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #154200

Re: Jak dobrze zaprojektować aplikację?

#154200
From: Arivald
Date: Fri, 10 Jul 2015 20:07
56 lines
4242 bytes
On 2015-07-10 08:53, Borneq wrote:
> Chciałbym zapytać się osób mających doświadczenie w projektowaniu nowych
> aplikacji. Jak myślę, aplikację należy projektować od góry, najpierw
> podzielić funkcjonalnie na pakiety i klasy, potem wybrać metody tych
> klas a następnie będzie można wypełniać już kodem te metody?
> Tylko jak nie widząc jeszcze aplikacji ustalić te klasy?

Generalnie, jak masz już pomysł/potrzebę na aplikację, to najpierw 
dobrze jest ją opisać. Co ma robić, po co, jakie wejścia danych, jakie 
wyjścia. Najlepiej w zespole, jak jest, bo każdy widzi to nieco inaczej. 
Dopiero jak już mniej więcej wiadomo o co chodzi, to zaczyna się 
wyodrębnianie modułów/funkcjonalności, szukanie co jest podobne a co 
inne, co można zrobić gotowymi bibliotekami, a co jest zupełnie nowe.

Na tej podstawie można zrobić zgrubny schemat aplikacji, zadecydować o 
technologiach i bibliotekach jakie mają być użyte. Ile i jakie warstwy 
będą używane, i w jakich kierunkach. Kierunkach w sensie że jak masz 
jądro aplikacji, kod biznesowy, to jednym kierunkiem jest zachowanie 
danych (warstwy [w kierunku od środka] to np. serwis/klasa 
DAO/entity/persistence manager/baza danych), kolejnym jest UI (warstwy: 
kontroler/model widoku/widok), kolejnym możne być komunikacja sieciowa 
lub z urządzeniem, lub silnik wyszukiwania czy obliczania, etc. Ważne 
jest że warstwy z różnych kierunków nie rozmawiają ze sobą, a jedynie z 
warstwą pod/nad w tym samym kierunku, jedynie centralna logika biznesowa 
komunikuje się z górnymi warstwami każdego kierunku.

Stosunkowo często technologie/biblioteki wymuszą pewne rozwiązania, 
pewien określony szkielet aplikacji. Sam z siebie taki Spring robi w 
zasadzie za szkielet, dostarczając mnóstwa bloków do budowy aplikacji, 
tudzież wyznacza sposób tworzenia pozostałych bloków.

Teraz z funkcjonalności które nie są zapewniane z gotowców trzeba 
porobić bloki funkcjonalności, pamiętając że każdy blok działa tylko w 
jednej warstwie aplikacji. Trzeba opisać co on ma robić, i jeśli to 
istotne, to jak ma to robić. Trzeba także opisać jakie dane i jak będą 
wymieniane, jaką kontrolę mają jedne bloki nad innymi, i inne metody 
komunikacji.

I teraz dopiero można zacząć projektować klasy, jak to Piotr już opisał. 
W każdym bloku skupiaj się tylko na nim, i na blokach które będą z nim 
współdziałały, w sensie że API tego współdziałania jest wspólne. 
Generalnie dobrze jest zacząć od podstawowej funkcjonalności, o ile nie 
została już dostarczona bibliotekami.

Jak już masz klasy to można je powoli zacząć wypełniać kodem. Ale dobrze 
jest zacząć od unit testów, bo będziesz musiał pomyśleć o szczegółach 
działania klas, jak ich się używa, czy wygodnie, czy może jednak API 
jest uciążliwe i warto by je zmienić. Pomyślisz też o edge case'ach, 
limitach, możliwych błędach i ich obsłudze. Po czymś taki sam kod klas 
to często jest "pikuś" ;-).

Wielu programistów tego nie docenia, ale tak naprawdę samo klepanie kodu 
to nie więcej jak 1/5 czasu pracy nad aplikacją. Często mniej.

-- 
Arivald
Technical Details
Message-ID: <mnp8lv$3f9$1@mx1.internetia.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.internetia.pl!not-for-mail
References: <mnnq5r$1vp$1@node2.news.atman.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.internetia.pl!not-for-mail
From: Arivald <NOSPAMarivald@interia.pl>
Newsgroups: pl.comp.lang.java
Subject: Re: Jak dobrze zaprojektować aplikację?
Date: Fri, 10 Jul 2015 22:07:34 +0200
Organization: Netia S.A.
Lines: 57
Message-ID: <mnp8lv$3f9$1@mx1.internetia.pl>
References: <mnnq5r$1vp$1@node2.news.atman.pl>
NNTP-Posting-Host: 78.10.99.21
Mime-Version: 1.0
X-Trace: mx1.internetia.pl 1436558847 3561 78.10.99.21 (10 Jul 2015 20:07:27 GMT)
X-Complaints-To: abuse@inetia.pl
NNTP-Posting-Date: Fri, 10 Jul 2015 20:07:27 +0000 (UTC)
In-Reply-To: <mnnq5r$1vp$1@node2.news.atman.pl>
X-Tech-Contact: usenet@internetia.pl
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.0
X-Server-Info: http://www.internetia.pl/
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit