2010-12-19 10 views
12

Dobra ludzie, tu jest inny dla ya:Porady dla początkujących O N-Tier Applications

Zaczynam na świecie apps n-tier. Zrobiłem trochę czytania na ten temat i ogólne porady są takie, że celem aplikacji n-warstwowych jest abstrakcyjne warstwy kreacji funkcjonalności. Tak więc, na podstawie tego, w aplikacji n-warstwowych regularny model:

Data Access -> Business Layer -> Presentation

Ponieważ jestem programistą .NET, myślałem, że w celu zwiększenia integracji z wielu rodzajów klientów (Silverlight Web App lub nawet klient WinForm). Powinienem używać WCF (Windows Communication Foundation) jako usług danych w warstwie biznesowej, aby klienci mogli się z nim komunikować bez względu na jego typ. Ponadto, jestem wielkim fanem NHibernate jako ORM. Więc moja struktura wygląda tak:

Data Access (NHibernate) -> Business Layer (WCF) -> Presentation (WPF, ASP.NET, WinForms

Ok, więc jest to konfiguracja. Jestem totalną nowicjuszką w tego rodzaju podejściu, więc pomyślałem, że mógłbym opublikować tutaj, prosząc o radę na temat tej konfiguracji. Ponadto jestem bardzo zdezorientowany, jak to skonfigurować w rozwiązaniu VS, lubię rozdzielać warstwy w różnych projektach, ale co z abstrakcją obiektów danych (takich jak klient, zamówienie itp.)? Czy umieszczam je w osobnej bibliotece? A co z WCF? Wiem, że grzechem programisty jest przesyłanie klas danych przez kabel do klienta. Jaki jest profesjonalny sposób, aby to osiągnąć?

Dzięki, każda rada byłaby bardzo doceniana.

+0

+1 - dobre pytanie przynosząc kwestie do punktu. Może to być jednak trochę subiektywne. – Lucero

+0

http://stackoverflow.com/questions/1650887/mixing-nhibernate-with-3-tier-developing – Lucero

+0

Lucero, dzięki za odpowiedź. Sprawdziłem już to pytanie, rozwiązuję niektóre z moich wątpliwości, ale niestety bardzo nie podoba mi się jego podejście. Wydaje się, że każdy zdaje się przeciwstawiać eksponowanie obiektów obiektów NHibernate bezpośrednio do WCF, a plakat w rzeczywistości odnosi się do usług WCF do NHibernate, zamiast korzystać z klasy usług mediatora. Z niecierpliwością czekam na zapewnienie abstrakcji i integracji w jak największym stopniu. –

Odpowiedz

14

To prawie na cel. N-Tier jest nieco bardziej złożony niż N-Layer i można go skontrastować, pytając: "Czy twoje warstwy faktycznie żyją na oddzielnych fizycznych serwerach?"

W zależności od tego, jak skomplikowana jest twoja warstwa biznesowa, możesz ją dodatkowo rozrysować między warstwę biznesową i usługową. Zazwyczaj te dwie są ściśle związane i żyją na tym samym serwerze fizycznym. Warstwa usługi często działa jako fasada dla twojego BLL.

Jeśli warstwa prezentacji znajduje się na tym samym serwerze, aplikacje ASP.NET lub WinForm mogą chcieć komunikować się z BLL bez przechodzenia przez usługi WCF.

Przeczytaj na Microsoft Patterns & Practices - Application Architecture Guide.

Twoje obiekty domenowe powinny żyć we własnym zespole, zazwyczaj w modelu Twojej domeny. Według Microsoft Framework Design Guidelines, to dobra praktyka, aby wymienić swoje zespoły projektowe odpowiednio:..

[przedsiębiorstwo] [ProductOrComponent] [...]

zdarza mi się podoba ten format imienin odstępami i ogólnie używać:

....

[Spółka] [Produkt] [Warstwa] [podwarstwy] [...]

Oto przykład rozwiązanie wykorzystujące foldery rozwiązanie do organizowania każdego projektu: alt text

I W tym przykładzie mam warstwę BLL i warstwę usługi. Warstwa usługi zapewnia rzeczywistą implementację w bibliotece WCF, podczas gdy prezentacja faktycznie zawiera aplikację WWW WCF do hostowania usług. Zawsze dobrą praktyką jest dzielenie implementacji z interfejsu.

Folder/Client można zignorować, po prostu używam tego jako przykładowej aplikacji konsolowej do testowania.Wszelkie aplikacje klienckie, które zużywają twoją usługę, powinny prawdopodobnie mieć własne rozwiązanie lub będziesz zarządzać ogromnym rozwiązaniem.

Co do obiektu danych przesyłanego przez kabel ... Zakładam, że masz na myśli klasy z ORM. (Model domeny) Masz rację, ogólnie uważa się, że jest to zła praktyka. Rozwiązaniem są obiekty przenoszenia danych. Na zdjęciu widzę bibliotekę .Dto. Jeśli jesteś w stanie używać narzędzi takich jak AutoMapper, niż ja to wszystko robię, to dodanie DTO do twojego rozwiązania niesie ze sobą dalszą złożoność i konserwację. Wierzę, że Dino Esposito napisał dobry artykuł na ten temat. Postaram się znaleźć to dla ciebie.

Mam nadzieję, że to pomoże.


[EDIT]

Należy zauważyć, że jestem zaznajomiony z możliwościami NHibernate jest. Mogą istnieć lepsze rozwiązania dla korzystania z tej ORM. Pracowałem tylko z Entity Framework.


[EDIT 2]

Wyjazd Dino Esposito - The Pros and Cons of Data Transfer Objects

+0

Dobra, twoja odpowiedź jest bardzo prosta i rozwiązuje prawie każdą wątpliwość, którą miałem. Dziękuję za schemat rozwiązania VS i referencje. Teraz mocno zastanawiam się nad kupnem wydrukowanej książki App Architecture. –

+0

Zdecydowanie dobry zakup. Posiadam wydrukowane kopie obu wspomnianych książek. Świetne odczyty i materiały referencyjne. – Daniel

Powiązane problemy