8

W jaki sposób przekazujesz dane do warstw w aplikacji n-warstwowej? Wyrysowałem 3 różne metody.przekazywanie danych w aplikacji ntierowej

A) generic .net typowych obiektów tabel danych, Hashtables, zestawów danych generycznych, sznurki, wskazówki itd ... następnie za pomocą zestawów danych, aby wypełnić swoje obiekty biznesowe, które są wysłane do warstwy UI.

alt text http://img11.imageshack.us/img11/460/generic.png

http://dabbleboard.com/draw?b=eiu165&i=26&c=54eef6f1ac01f03c85919518f4a24e798e57e133

Pro- Bez dodatkowych warstw potrzebne Kon- pracować ze standardowym zbiorów danych i tabel w warstwie biznesowej

B) za pomocą warstwy jednostek, które znajdują się w innych warstwach miałby odniesienia. Ta warstwa zawierałaby albo mocno wpisane zestawy danych, albo zwykłe stare obiekty C. Obiektami byłyby głównie dane kontenerów i bardzo mało logiki. byłyby to te same obiekty wysłane do warstwy interfejsu użytkownika.

alt text http://img8.imageshack.us/img8/6454/entities.png

http://dabbleboard.com/draw?b=eiu165&i=6&c=d0c2b346894a96b12bd3867f630e474a2af098fa

Pro pracy z tej samej klasy we wszystkich warstwach Kon- dodanie odniesienia do entities.dll wszystkich warstw

C) użyć obiektów przesyłania danych (obiekty conatiner o nly) zdefiniowane w warstwie DataAccess. następnie za pomocą tych obiektów wypełnić obiekty biznesowe, które zostaną wysłane do warstwy interfejsu użytkownika.

alt text http://img43.imageshack.us/img43/1236/transferp.png

http://dabbleboard.com/draw?b=eiu165&i=27&c=f886efa3f9d5eb4b45ddb02361c79cdcdaec0a9b

Pro- warstwa firma nie musiałaby pracować z klas generycznych Kon- pracy z dwóch typów obiektów i trzeba by nawilżyć obiekty biznesowe z obiekty przeniesienia

Mieliśmy dyskusję w pracy i chcieliśmy zobaczyć, co społeczność myśli. Dodałem także link do płyty głównej. proszę skopiować i utworzyć zamiast edytować.
Dzięki

+1

Chciałbym dać ci +1 za link do deski. Nigdy o tym nie wiedziałem. Dzięki! Teraz ... jaki był twój problem? – Randolpho

+0

Ditto na płycie. To fajnie. – NotMe

+0

Tak, dabbleboard jest świetny do pracy z członkami zdalnego zespołu – eiu165

Odpowiedz

5

Jeśli używasz metody warstwowej z warstwami, co oznacza, że ​​wszystkie warstwy są (w zasadzie) wykonywane w tej samej przestrzeni procesowej i nie ma w związku z tym żadnych rozrządów/serializacji, skorzystam z podejścia B. Utwórz osobny moduł dla twoje istoty, od których zależą wszystkie aspekty twojego programu, i łączą się z tym.

Jeśli jednak, jak sugeruje twój tytuł, używasz podejścia , co oznacza, że ​​są przekroczone granice procesowe i/lub sieciowe, sugeruję, abyś zastosował podejście C. Nie jesteś tak naprawdę przekazywanie wystąpień, przekazujesz kopie, więc wszelkie korzyści związane z łączeniem się z tym samym obiektem, takie jak obserwowalne opcje, na przykład podejście MVC, i tak są tracone. Lepiej definiować interfejsy API danych na każdym poziomie poziomu niż starać się korzystać z tej samej klasy.

+1

jest to podejście warstwowe i wszystkie warstwy są wykonywane w tej samej przestrzeni procesowej. W takim razie jaki powinien być tytuł? tutaj jest moje zgadywanie przekazywania danych w aplikacji n-warstwowej? Dzięki – eiu165

+1

Dość dużo. Różnica między warstwą a warstwą jest zwykle niewyraźna, ale dominującą opinią jest to, że warstwa przekracza pewien rodzaj fizycznej granicy, zwykle takiej, która wymaga uporządkowania lub serializacji. Warstwa ma zazwyczaj na myśli separację * logiczną * i zwykle nie przekracza tej granicy. Sprawdź http://geekswithblogs.net/mahesh/archive/2006/10/28/95322.aspx, aby uzyskać linki do dodatkowych informacji. – Randolpho

+1

Nie byłby używany okres zbioru danych ... – PositiveGuy

0

Lubię Wariant C, ale również daje mi wstrzymać z dwóch powodów:

  1. muszę rozłożyć knwowledge tego, co properites są w zbyt wielu miejscach.
  2. DTO muszą być przekształcalne do postaci szeregowej, co nie jest straszne, ale nadal jest brane pod uwagę.
0

Zakładam, że wszystkie 3 warstwy istnieją w tej samej aplikacji.W java conajmniej użyłem Hibernate dla dostępu do danych i użyłem tych fasoli danych we wszystkich warstwach. (opcja B) Sensowne jest ponowne wykorzystanie twoich jednostek w twoich warstwach.

1

Świetne pytanie - jak zwykle odpowiedź musi brzmieć "to zależy".

Co do typu aplikacji i czy rzeczywiście istnieje potrzeba posiadania obiektów biznesowych (jednostek), w przeciwieństwie do obiektów transferu (np. Zubożonych obiektów biznesowych, które bardziej odpowiadają elementom bazy danych).

Tradycyjnie, twierdziłbym, że zawsze potrzebujesz ogólnych zestawów danych (lub tabel danych), wyłącznie ze względu na wydajność. Ilekroć istnieje potrzeba pracy z większymi zestawami, wyświetlania lub manipulowania nimi, tradycyjny, surowy sposób OO tworzenia instancji dużej liczby obiektów biznesowych nie powiódł się.

Jednak od kiedy zacząłem pracować z Linq na SQL, moje paradygmaty uległy zmianie. Nie ma już takiej potrzeby, ponieważ model Linq może być wszystkim - obiektami biznesowymi, obiektami transferu i typowymi zbiorami danych. Nie zbadałem jeszcze, jak dobrze to działa w naprawdę dużych aplikacjach i czy powinna istnieć potrzeba wyizolowania kodu front-end z modelu Linq. Rozmawiałem o tym z kolegami, ale nie znalazłem odpowiedzi w żaden sposób.