🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #22362

Re: ServiceLayer - rozważanie, best practice

#22362
From: MarlonB
Date: Thu, 23 Feb 2012 11:03
83 lines
4692 bytes
Użytkownik "Łukasz 'Maly' Ostrowski" <maly@USUNnemo.pl> napisał w wiadomości 
news:1mt437iq9a6yz.1vti2z6dbuetk.dlg@40tude.net...
> On Wed, 22 Feb 2012 18:02:20 +0100, MarlonB wrote:
>> Mógłbyś napisać coś więcej w jaki sposób / ze względu na co rozdzielasz
>> funkcjonalność na Service i Repository?
>
> Behavior i Composite Actions - Service
> Data Access - Repository
>
> Ale w uproszczeniu, wszystko można traktować jako Service. Zostajesz
> wtedy przy "Data Services". Ale tak jak napisałem:
>> /Podział ideologiczno-nomenklaturyowy jest czysto syntetyczny/
>
> Przykładowo w wersji #A z której korzystam, jest overkill bo
> kontroler nigdy nie korzysta bezpośrednio z repository,
> tylko z serwisów, które z kolei "importują" sobie repozytoria.
> Dochodzi do sytuacji w której
>  IUserService.Get(int id);
> jest bezpośrednim forwardem do
>  IUserRepository.Get(id);
> Nie zauważyłem żadnego zysku z takiego rozwarstwienia, więc
> zacząłem także importować repozytoria bezpośrednio do kontrolerów.

Kapuje. U mnie będzie potrzebna właśnie taka warstwa, bo być może przed MVC 
będę miał jakiś web service.

> Wszystko jest umowne, wybiera się ścieżkę najsensowniejszą z Twojego
> punktu widzenia.
>
>> Repository wykorzystuje między warsta dataAccess a businessLogic. Jak
>> rozumiem repository ma tylko operacje CRUD? Dlatego nie bardzo widzę
>> zastosowania repository w serviceLayer, jako że potrzebuje konkretnych
>> akcji. Być może coś źle rozumiem...
>
> Dobrze rozumiesz. Repository pattern to CRUD.
>
>> Ciekawi mnie bardzo opinia kogoś już doświadczonego, czyli co powinno
>> znaleźć się w serviceLayer? Jakie patterny? W serviceLayer korzystam z 
>> unity
>> do pozyskania konkretnej implementacji danego serwisu.
>
> ServiceLocator.Resolve<T>() będzie prawdopodbnie w zupełności jedynym
> wymaganym callem kontenera IoC, defacto, ewentualnie wystarczy
> sforwardować podstawowe calle Unity.


No to mam w takim razie pytanie. Czy serviceLayer ma mieć swoje własne view 
modele? Tzn czy oprócz zależności od domain modeli ma mieć jeszcze jakieś 
swoje modele, na które będę je mapował?
Bo stąd był mój pomysł z IDoctionary, bo coś musze zwracać. A co mam zwracać 
jesli nie domain modele? Jakiś ViewModel? Bo w MVC też mam ViewModele i nie 
bardzo wiem jak to pożenić.

dataaccessLayer, businessLayer, serviceLayer => te mają zależność od domain 
models.
UiWebLayer => ma zależność od serviceLayer i posiada własne ViewModele. Nie 
chciałbym, aby była zależność od domain models.

Co sprowadza się do tego, że serviceLayer musi zwracać swoje ViewModele, 
które będą mapowane na ViewModele z UiWebLayer :)

Cel jest taki aby niepotrzebnie nie mieszać i nie przepisywać ciągle z 
modelu na model, ale widzę, że trudno coś innego wymyśleć. Do mapowania 
używam Automappera, więc może nie będzie aż tyle roboty. Rzecz, której się 
boje, to nagły rozrozt aplikacji i możliwość pogubienia się i koszty w 
utrzymaniu skomplikowanego kodu. Teraz to wygląda niewinnie...

>> Może jakieś ciekawe artykuły jak dobrze zaprojektować to wszystko?
>
> Przyjrzyj się SharpArchitecture, nie jest doskonałe, ale tak do
> poglądowego ogarnięcia jest całkiem niezłe. Ostatnim razem jak
> widziałem #A, było nieźle, nie wiem w jakim dokładnie stanie
> architekturalnym jest wersja aktualna.
>

Sciągnąłem właśnie i sobie "na to pacze" :)

Dzięki za wskazówki.

Pozdro.

M. 
Technical Details
Message-ID: <ji56eu$tal$1@mx1.internetia.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!opal.futuro.pl!news.internetia.pl!not-for-mail
References: <ji2pdf$ht6$1@mx1.internetia.pl> <12b400yh5lb3r.mg3vhkurgug9.dlg@40tude.net> <ji373f$i9m$1@mx1.internetia.pl> <1mt437iq9a6yz.1vti2z6dbuetk.dlg@40tude.net>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!opal.futuro.pl!news.internetia.pl!not-for-mail
From: "MarlonB" <zyrafa@wieloryb.kon>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Re: ServiceLayer - rozważanie, best practice
Date: Thu, 23 Feb 2012 12:03:40 +0100
Organization: Netia S.A.
Lines: 84
Message-ID: <ji56eu$tal$1@mx1.internetia.pl>
References: <ji2pdf$ht6$1@mx1.internetia.pl> <12b400yh5lb3r.mg3vhkurgug9.dlg@40tude.net> <ji373f$i9m$1@mx1.internetia.pl> <1mt437iq9a6yz.1vti2z6dbuetk.dlg@40tude.net>
NNTP-Posting-Host: 87-205-19-179.ip.netia.com.pl
Mime-Version: 1.0
X-Trace: mx1.internetia.pl 1329995038 30037 87.205.19.179 (23 Feb 2012 11:03:58 GMT)
X-Complaints-To: abuse@inetia.pl
NNTP-Posting-Date: Thu, 23 Feb 2012 11:03:58 +0000 (UTC)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157
X-Tech-Contact: usenet@internetia.pl
X-Newsreader: Microsoft Outlook Express 6.00.2900.5931
X-Priority: 3
X-Server-Info: http://www.internetia.pl/
X-MSMail-Priority: Normal
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit