Article View: pl.comp.objects
Article #14887Re: Baardzo duże obiekty
From: Michal Glomba
Date: Tue, 11 Jul 2006 20:53
Date: Tue, 11 Jul 2006 20:53
52 lines
3740 bytes
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-mailReferences:
<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