Pytanie NHibernate ISet Vs IList


W większości NHiberate przykłady używają ISET nad IList. Zdaję sobie sprawę z podstawowych różnic między tymi dwoma to znaczy  zestaw jest wyjątkowy. Jednak nie jestem pewien, dlaczego używają ISet nad IList podczas leniwego ładowania.

Jaką przewagę ma (Iesi.Collections.Generic) ISet nad IList? Szczególnie w przypadku leniwego ładowania.


14
2018-03-22 20:31


pochodzenie


Nieco powiązany temat: stackoverflow.com/questions/1023697/... dotyczy to BCL, a nie specyficznego dla NHibernate. - Chris Marisic


Odpowiedzi:


Uważam, że wynika to głównie z dziedzictwa java NHibernate.

Widzieć wpis w FAQ dotyczący trwałych kolekcji. W szczególności wspomnieć, że Java zawiera więcej kolekcji domyślnie niż C #, a oni, w szczególności mapować do ISet.

Sądzę, że powodem, dla którego większość próbek korzysta z tego jest głównie dlatego, że jest to bardziej powszechne w Javie, a próbki zostały przeniesione z Java. (Niektóre próbki używają zestawu bez potrzeby ustawiania go jako zestawu ...)

Biorąc to pod uwagę, istnieją wyraźne różnice między zestawem a listą. Zachowanie jest inne, więc istnieją przypadki użycia, w których zachowanie zestawu jest bardziej odpowiednie. W przypadku leniwego ładowania pozwala to zmniejszyć ograniczenie dotyczące kolejności ładowanych rzeczy, dzięki czemu można potencjalnie załadować mniej informacji i utrzymać umowy interfejsu w miejscu.


17
2018-03-22 20:41





Ustawiony interfejs wyraża tylko, że wynikowy zbiór może być:

  1. testowane pod kątem członkostwa
  2. wyliczone w jakiejś arbitralnej kolejności (co może ulec zmianie)

interfejs listy wyraża pierwszy, ale drugi jest silniejszy, porządek jest dobrze zdefiniowany i nie zmieni się, chyba że coś mu to poleci.

Korzystając z mniej restrykcyjnej umowy (zestawu), zyskujesz więcej swobody w używaniu (możesz załadować zestaw w dowolnej kolejności i nikt, kto używa twojej klasy, nie powinien dbać, jeśli to zamówienie nie jest spójne)

Mam tutaj wyjaśnione, że zestaw zapewnia to dalej, niż nie może zawierać duplikatów (co jest ograniczeniem dla wdrażających). Jeśli jednak konieczne było przechowywanie takich instancji, zestaw byłby po prostu niedopuszczalny, więc nie stanowi to problemu i staje się dodatni. Praca Konsumenta staje się jeszcze łatwiejsza, ponieważ nie muszą się oni obawiać, że duplikaty istnieją już na nich.


7
2018-03-22 20:38