🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #14887

Re: Baardzo duże obiekty

#14887
From: Michal Glomba
Date: Tue, 11 Jul 2006 20:53
52 lines
3740 bytes
Cześć,

> Czy zdarzyło się komuś z Państwa pisać wielki komponent systemowy 
> zrealizowany w postaci pojedynczego obiektu? Nie mam tu na myśli tego, 
> że cały kod takiego komponentu jest zawarty w jednej klasie, tylko że 
> pojedyncza klasa kontroluje całą sieć powiązanych obiektów i stanowi do 
> nich swoistą fasadę wobec klientów.

Jeśli dobrze zrozumiałem, że rzecz skupia się po prostu wokół zbudowania 
fasady udostępniającej funkcjonalność skomplikowanego subsystemu, to 
przypomina mi się mój ulubiony diagram ilustrujący wzorzec Facade:
http://home.earthlink.net/~huston2/images/facade_dcd.gif ;)

> Sam jeszcze nie miałem okazji tworzyć (lub współtworzyć) tego rodzaju 
> oprogramowania, a jeden komponent systemu, nad którym pracuję wygląda mi 
> na kandydata na taki obiekt.
> 
> Ponieważ wydaje mi się, że przy pisaniu takiego obiektu trzeba zwrócić 
> szczególną uwagę na wiele aspektów możliwych do bezkarnego pominięcia w 
> innych przypadkach (użycie Singletonów?), chciałbym się Państwa poradzić 
> co do praktyk zalecanych przy rozwoju takiego oprogramowania.

Kilka luźnych uwag:
0. Kluczowa sprawa: dobrze określić odpowiedzialności schowanego 
subsystemu i prawidłowo wyznaczyć jego interfejs
1. Jeśli liczba operacji, które można wykonać na schowanym za fasadą 
subsystemie, jest spora, i mają one różny poziom złożoności, to warto 
rozważyć zbudowanie hierarchi (choćby dwupoziomowej) fasad oferujących 
interfejsy o różnym stopniu skomplikowania, z czego niekoniecznie 
wszystkie implementacje muszą być publiczne, choć mogą. Przede wszystkim 
chodzi o zbudowanie struktury, w której operacje będą mogły być 
wykonywane na coraz większym poziomie abstrakcji - wygodnym dla 
użytkownika fasady, niekoniecznie bliskim samej implementacji operacji w 
chowanym subsystemie. Co więcej, jeśli użytkowników wykorzystujących 
fasadę można zaklasyfikować do kilku ról, to dla każdej z nich można 
zbudować fasadę o różnym stopniu złożoności, co ułatwi korzystanie z 
subsystemu.
2. Jeśli ten komponent ma charakter integracyjny i używacie Java to 
warto użyć Springa jako kontenera obiektów do wygodnej manipulacji 
zależnościami i zarządzania tworzeniem obiektów w samym subsystemie 
(przede wszystkim pilnowania singletonów) - podobnie, jeśli sam 
komponent występuje w środowisku mocno integracyjnym, to warto fasadę 
kojarzyć z innymi fasadami właśnie przez dependency injection.
3. Ostatnia praktyczna uwaga: nie przesadzając z liczbą metod w fasadzie 
i skrupulatnie dobierając metodom nazwy, przedłużasz tym samym życie 
programistom-użytkownikom twojego dzieła :)

Mam nadzieję, że choć trochę pomogłem.

-- 
pozdrawiam,
Michał
Technical Details
Message-ID: <e9132v$b8k$1@news.dialog.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <e90trd$m24$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
From: Michal Glomba <zapytaj@o.adres>
Newsgroups: pl.comp.objects
Subject: Re: Baardzo duże obiekty
Date: Tue, 11 Jul 2006 22:53:25 +0200
Organization: Dialog Net
Lines: 52
Message-ID: <e9132v$b8k$1@news.dialog.net.pl>
References: <e90trd$m24$1@news.onet.pl>
NNTP-Posting-Host: xdsl-969.wroclaw.dialog.net.pl
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1152651167 11540 81.168.131.201 (11 Jul 2006 20:52:47 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Tue, 11 Jul 2006 20:52:47 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040616
X-Accept-Language: en-us, en
In-Reply-To: <e90trd$m24$1@news.onet.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit