2013-09-05 1 views
5

Mam aplikację, która wymaga użycia wielu różnych wyliczeń. Aplikacja może być podzielona na różne warstwy. Na potrzeby przykładu przyjmijmy trzy warstwy: zewnętrzną bibliotekę analityczną, logikę biznesową aplikacji i logikę interfejsu użytkownika/prezentacji.Zarządzanie partiami w wielu warstwach aplikacji

W wielu przypadkach wszystkie warstwy mogą wymagać wyliczenia reprezentującego tę samą koncepcję. Weźmy na przykład częstotliwość płatności. (np. roczny, półroczny, kwartalny itp.). Zewnętrzna biblioteka zapewnia własne wyliczenie, różne klasy w warstwie logiki biznesowej wymagają podobnego wyliczenia, a na końcu warstwa interfejsu użytkownika może potrzebować jej do prezentacji różnych opcji w menu rozwijanym itp.

Teraz normalnie chciałby chronić użytkownika każdej warstwy przed wewnętrznymi zależnościami i szczegółami implementacji, nie ujawniając typów z wewnętrznych zależności w publicznych interfejsach warstwy. Oznacza to, że nawet jeśli interakcja z biblioteką 3rd party wymaga użycia własnego wyliczenia "Frequency", musiałbym utworzyć ekwiwalent "Frequency" dla warstwy biznesowej i potencjalnie kolejną dla warstwy interfejsu użytkownika ...

Wszystko to wymaga dużej liczby mapowań w tył iw przód, z dużą ilością dodatkowych klas mapperów. Z drugiej strony, zaletą jest to, że każda warstwa może zdecydować o wykluczeniu wartości, których nie potrzebuje lub wsparcia z własnej wersji wyliczenia ...

Teraz, ponieważ mam do czynienia z lotem z wyliczeń, zastanawiałeś się, czy to na ogół dobra rzecz, czy też po prostu komplikuję rzeczy?

Odpowiedz

4

Powiedziałbym, że komplikujesz rzeczy. Dlaczego nie ma osobnego projektu dla takich wspólnych jednostek? Następnie każdy zestaw może odwołać się do projektu Common, aby odnieść się do niezbędnych wyliczeń i nadal mieć je całkowicie niezależne od siebie.

+0

To nie jest dobra sugestia. Lepiej mieć wyliczenie blisko podmiotów, które będą z nich korzystać. Na przykład 'Order' może zawierać wyliczenie' OrderType', co ma sens, aby umieścić je w jednym folderze projektu. Ułatwia to ich zmianę zgodnie z logiką biznesową. To nie jest atrakcyjne, aby gromadzić takie różne wyliczenia w jednym miejscu "zwykłym". –

+0

@MassoodKhaari Podział enum na oddzielne biblioteki pozwala na luźne połączenie warstw BLL i UI bez duplikacji kodu - jest to bardzo dobra sugestia. Umieszczenie dwóch rzeczy w jednym folderze * jest dobrym pomysłem, o ile te rzeczy mają być ściśle sprzężone, co nie ma miejsca w tym przypadku (iw tym przypadku faktycznie zaszkodzi rozdzieleniu problemów w ramach rozwiązania).Twoja krytyka nie jest prawdziwa. –

0

Cóż, być może nieporozumieję, ale tak naprawdę, będziesz potrzebować tylko w warstwie danych, która jest przeglądana przez warstwę logiczną, twoje enuns. Korzystając z własnego przykładu, w tabeli będą wyświetlane nazwy kolumn PaymentFrequency. Twoja tabela powinna być odwzorowana w warstwie danych dla tego konkretnego pola, więc utworzysz wyliczenie i typ kolumny PaymentFrequency - do tego momentu atrybut twojej klasy lub encji tabeli - zostanie ustawiony jako wyliczenie utworzone dla tego pola cel, powód. Tak więc, kiedy wskażesz warstwę logiczną, aby zażądać/uzyskać dostęp do warstwy danych, musisz zrozumieć to samo wyliczenie - więc jeśli korzystasz z warstwy DAL między warstwami logicznymi i warstwami danych, polecam Ci tworzenie enunów w oddzielnym klasa/plik. Cóż, w warstwie logicznej - używając opcji wyliczania - zapełnisz prosty komponent Combo z opcjami wyliczania, więc będziesz ukrywać opcje w interfejsie użytkownika, ukrywając wszystkie swoje warstwy, w taki sposób, aby użytkownicy wygrali wiesz, że używasz enum do obsługi opcji.

Mam nadzieję, że ta pomoc. Przepraszamy - naprawdę przepraszamy - za to * źle po angielsku! Jeśli to nie pomoże, opublikuj przykłady z dorsza, aby łatwiej Ci było pomóc =)