Thread View: alt.pl.comp.lang.csharp
7 messages
7 total messages
Started by 3P
Wed, 24 Feb 2010 23:05
Repository pattern
Author: 3P
Date: Wed, 24 Feb 2010 23:05
Date: Wed, 24 Feb 2010 23:05
33 lines
1441 bytes
1441 bytes
Cześć.
Chciałbym sobie zaimplementować Repository pattern.
Jednak wszystkie przykłady w sieci sa dla prostych obiektów.
Np.
Obiekt o = new Obiekt();
repository.Add/Remove/Update(o);
Ale jak to powinno wygladać, gdy mamy relację Rodzic-Dziecko pomiędzy
obiektami?
class Rodzic
{
public List<Dziecko> Dzieci;
}
Rodzic r = new Rodzic();
rodzicRepository.Add(r);
r.AddDziecko(new Dziecko());
// co z repository? Jak to zawołać? Kto?
Czy implementował ktoś ten wzorzec, lub widzał jakieś bardziej złożone
przykłady niż mój pierwszy?
--
Używam klienta poczty Opera Mail: http://www.opera.com/mail/
Re: Repository pattern
Author: Wiktor Zychla
Date: Thu, 25 Feb 2010 09:10
Date: Thu, 25 Feb 2010 09:10
14 lines
1435 bytes
1435 bytes
> Rodzic r = new Rodzic(); > rodzicRepository.Add(r); > > r.AddDziecko(new Dziecko()); > // co z repository? Jak to zawołać? Kto? np.: Dziecko d = new Dziecko(); r.AddDziecko( d ); dzieckoRepository.Add( d ); Wiktor Zychla
Re: Repository pattern
Author: 3P
Date: Thu, 25 Feb 2010 20:49
Date: Thu, 25 Feb 2010 20:49
23 lines
1674 bytes
1674 bytes
Dnia 25-02-2010 o 10:10:03 Wiktor Zychla <wzychla@nospam.com> napisał(a): >> Rodzic r = new Rodzic(); >> rodzicRepository.Add(r); >> >> r.AddDziecko(new Dziecko()); >> // co z repository? Jak to zawołać? Kto? > > np.: > Dziecko d = new Dziecko(); > r.AddDziecko( d ); > dzieckoRepository.Add( d ); > Tylko, że Rodzic i Dziecko są jednym agregatem, a jego korzeniem jest Rodzic. W związku z tym powinienem mieć jedno repozytorium. W twoim przykładzie trochę bez sensu jest dodawanie dziecka do rodzica, skoro i tak muszę dodać Dziecko do repozytorium. Wydaje mi się, że musiałbym zrobić jakieś swoje śledzenie zmian w całych grafach obiektów i na podstawie zauważonych zmian dodawać/update'ować/usuwać. Chyba trochę za dużo roboty, aby robić to samemu.
Re: Repository pattern
Author: Artur Muszyński
Date: Thu, 25 Feb 2010 22:20
Date: Thu, 25 Feb 2010 22:20
36 lines
1806 bytes
1806 bytes
W dniu 2010-02-25 00:05, 3P pisze:
> Cześć.
>
> Chciałbym sobie zaimplementować Repository pattern.
>
> Jednak wszystkie przykłady w sieci sa dla prostych obiektów.
>
> Np.
>
> Obiekt o = new Obiekt();
> repository.Add/Remove/Update(o);
>
>
> Ale jak to powinno wygladać, gdy mamy relację Rodzic-Dziecko pomiędzy
> obiektami?
>
> class Rodzic
> {
> public List<Dziecko> Dzieci;
> }
>
> Rodzic r = new Rodzic();
> rodzicRepository.Add(r);
>
> r.AddDziecko(new Dziecko());
> // co z repository? Jak to zawołać? Kto?
>
>
> Czy implementował ktoś ten wzorzec, lub widzał jakieś bardziej złożone
> przykłady niż mój pierwszy?
Nie znam się na wzorcach, ale ja tu widzę klasę Node po której
dziedziczą Rodzic i Dziecko lub ostatecznie w tym przypadku może być
kompozycja.
artur
Re: Repository pattern
Author: Wiktor Zychla
Date: Fri, 26 Feb 2010 18:45
Date: Fri, 26 Feb 2010 18:45
25 lines
2261 bytes
2261 bytes
> Rodzic. W związku z tym powinienem mieć jedno repozytorium. nie znam żadnych konkretnych implementacji, więc trudno powiedzieć czy tak powinno być czy nie. z opisu samego wzorca nie wynika wiele, w szczególności nie wiadomo czy powinno być repozytorium per hierarchia czy per kategoria danych. > W twoim przykładzie trochę bez sensu jest dodawanie dziecka do rodzica, > skoro i tak muszę dodać Dziecko do repozytorium. w moim rozumieniu repozytorium jako interfejsu dla jednego typu danych to jakoś tak musiało by być. > Wydaje mi się, że musiałbym zrobić jakieś swoje śledzenie zmian w całych > grafach obiektów i na podstawie zauważonych zmian > dodawać/update'ować/usuwać. Chyba trochę za dużo roboty, aby robić to > samemu. chyba że opakujesz jakąś technologię która robi to sama. wtedy tylko pytanie - po co Ci repozytorium. tak nawiasem mówiąc - to pytanie jest i tak zasadne. pozdrawiam Wiktor Zychla
Re: Repository pattern
Author: 3P
Date: Fri, 26 Feb 2010 21:34
Date: Fri, 26 Feb 2010 21:34
10 lines
1365 bytes
1365 bytes
> chyba że opakujesz jakąś technologię która robi to sama. wtedy tylko > pytanie - po co Ci repozytorium. > > tak nawiasem mówiąc - to pytanie jest i tak zasadne. > > pozdrawiam > Wiktor Zychla Czymś muszę zawsze opakować. Staram się poznać i stosować Domain Driven Development, a repozytoria zapewniają dostęp do obiektów w DDD.
Re: Repository pattern
Author: 3P
Date: Fri, 26 Feb 2010 21:40
Date: Fri, 26 Feb 2010 21:40
17 lines
1959 bytes
1959 bytes
What exactly was the intent of the repository pattern in the first place? Looking back to [DDD, Evans] one will see that it is to represent a series of objects as if they were a collection in memory so that the domain can be freed of persistence concerns. In other words the goal is to put collection semantics on the objects in persistence. The key here is that as a rule there should be no persistence logic within the domain. This allows the domain to be more easily tested, tested independently of persistence and moved easily from a persistence mechanism (this is more important as a long term maintainability goal as opposed to “we want to use XML files now”). Simply put the contract of the Repository represents the contract of the domain to the persistence mechanism for the aggregate root that the repository supports. The realization that the Repository is less of an object and more of a contract to infrastructure is both a subtle and important one.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads