Czytam o warstwach aplikacji i chcę użyć tego projektu w moim następnym projekcie (c #, .Net). Parę pytań:
Czy separacja warstw odbywa się za pomocą przestrzeni nazw? Project.BLL.Whthing, Project.DAL.Whthing
Czy lepiej jest rozdzielić warstwy, następnie komponenty (Project.BLL.Component1), czy komponenty, a następnie warstwy (Project.Component1.BLL)
Czy w przypadku mojego DAL warstwa ta jest dalej organizowana przy użyciu różnych klas? Jeśli wszystkie wywołania bazy danych są umieszczone w jednej klasie, nie ma organizacji. Czy lepiej byłoby podzielić je na różne klasy lub przestrzenie nazw?
Czy klasy DAL są zazwyczaj statyczne? Wydaje się kłopotliwe tworzenie instancji obiektu DAL przed wywołaniem jednej z jego metod za każdym razem.
Będziemy wdzięczni za wszelkie inne wskazówki dotyczące robienia rzeczy z tymi warstwami we właściwy sposób.
źródło
W przypadku pytań 1 i 2 należy przejść do odpowiedzi Matthew.
Spędziłem dużo czasu, próbując znaleźć najlepszy sposób na uporządkowanie DAL aplikacji komputerowych. A najlepszy sposób naprawdę zależy od potrzeb aplikacji. W jednej z moich aplikacji poszedłem drogą posiadania klasy DA dla każdej tabeli bazy danych, która rejestrowała się w centralnej (tj. Singleton) klasie DataProvider i obsługiwała CRUD. Każda klasa DA może następnie zdecydować, czy chce buforować wszystkie dane tabeli w pamięci RAM, czy nie (wydajność!) I / lub czy musi mieć możliwość wyzwalania automatycznych aktualizacji klienta na innych klientach działających na innych komputerach (pomyśl o wielu użytkownikach konkurencja). Ułatwia to dodawanie nowych klas DAL, ponieważ wystarczy, że będą zgodne z interfejsem rejestracji.
Nie każdy DAL potrzebuje takiej funkcjonalności, ale dowiedziałem się, że samo podejście (tj. Dostawca danych singleton i proste klasy DAL ze statyczną rejestracją) znacznie ułatwiło mi życie, kiedy zacząłem dodawać nowe klasy.
Zdecydowanie nie polecałbym budowania CRUD w klasach wyższego poziomu, chyba że jest to bardzo prosta aplikacja. DAL jest abstrakcją przechowywania danych. Jeśli zdecydujesz się zmienić przechowywanie danych w pewnym momencie w przyszłości (nawet jeśli będzie to tylko używać MySQL zamiast MS SQL), będziesz bardzo za to wdzięczny. Ponadto: obiekty BLL powinny być uporządkowane według relacji logiki biznesowej. Obiekty DAL są uporządkowane według typów kontenerów pamięci, które reprezentują. Różnice mogą być dramatyczne.
Czy NIE dokonać klas DAL statycznych. To, co zyskujesz na szybkości kodowania, wiele razy stracisz na testowalności i elastyczności.
źródło