2010-01-22 24 views
12

Chociaż jest to subiektywne pytanie, jako nowy użytkownik NHibernate, jestem ciekawy, dlaczego wybrałbym Fluent vs tradycyjne mapowanie XML.Dlaczego Fluent NHibernate vs. hbm XML?

Z mojego punktu widzenia, kiedy po raz pierwszy pracowałem z NHibernate, użyłem interfejsu Fluent, ale wpadłem w pewne blokady dróg i miałem problem ze znalezieniem odpowiedniej dokumentacji dla interfejsu Fluent dla czegokolwiek poza "aplikacją zabawkową", więc nauczyłem się obsłużyć je za pomocą XML.

Z biegiem czasu zdałem sobie sprawę, że wykonałem większość swojej pracy po stronie XML i uświadomiłem sobie, że nie było tak przerażające, jak myślałem. Dla mnie osobiście był to przypadek złej dokumentacji i braku znaczących oszczędności czasu na kodowanie.

Może się zdarzyć, że brakuje mi ogromnej przewagi/wady, a ja naprawdę chciałbym usłyszeć opinie osób, które mają większe doświadczenie w pracy z tymi narzędziami.

Odpowiedz

16

Bezpieczeństwo podczas kompilacji i refaktoryzacja (zmiana nazw klas, właściwości) to jedna z korzyści płynących z płynnego odwzorowywania. Używanie jednego języka (C# lub VB.NET) do zapisywania odwzorowań, kodu programu i dostępu do danych to kolejna korzyść.

+0

Właściwie mam na to pytanie. Pamiętam, że Fluent rzuciłby niezły błąd kompilacji, gdyby mój plik odwzorowań był wyłączony - ale czy to pomogłoby, gdybym błędnie wpisał kolumnę tabeli, czy też debugowałbym wyjątek, tak jak teraz, gdy mój XML hbm wysadzi się w powietrze? Dzięki za odpowiedź btw! –

+0

Nie ma nic do oszczędzania, jeśli błędnie wpisujesz nazwę tabeli lub kolumnę. –

6
  • Imieniny czasie kompilacji i typu bezpieczeństwo
  • IntelliSense aby pokazać, które są dostępne metody biegle w dowolnym punkcie
  • dostosowania domyślnie
  • Automapper
+0

Dostajesz IntelliSense w XML, jak również ze schematem XSD NHibernate. –

+0

Otrzymujesz IntelliSense w oparciu o schematy hibernacji, ale nie w oparciu o model obiektu. – yfeldblum

+1

+1 za automatyzację, której IMO jest jedynym rzeczywistym "wsadem". Inne korzyści są miłe, ale nie są oszałamiające. – Aaronaught

0

Jak wiele otwarty oprogramowanie źródłowe, biblioteka ta była dostępna publicznie, zanim wiele funkcji było gotowych do produkcji. W zależności od wersji FluentNhib, z którą pracowałeś, niektóre funkcje mogły nie zostać w ogóle zaimplementowane. Na przykład, kiedy po raz pierwszy zacząłem z nim pracować, klucze kompozytowe nie zostały jeszcze zaimplementowane i po potknięciu się o blokadę znalazłem przeszkodę.

Ale produkt ewoluował w całkiem świetne narzędzie. Jest to kompletna funkcja w porównaniu do xml i zapewnia wszystkie korzyści, które już zostały opisane.

3

Dla mnie największą zaletą Fluent jest Automapper.

Potrafię zdefiniować mój model domeny za pomocą klas POCO, (głównie) bez obawy o nieprzyjemne szczegóły, jak będą mapowane do tabel w relacyjnej bazie danych.

Jako długoletni programista OO i okazjonalny programista DB, jestem o wiele bardziej komfortowy w projektowaniu w stylu OO. Wierzę również, że to pozwala mi pracować na wyższym, silniejszym poziomie abstrakcji.

Automapowanie sprawia, że ​​ciągłe zmiany w modelu domeny są znacznie mniej zniechęcające.

Twoi klienci właśnie ci powiedzieli w ostatniej chwili, że chcą dodać cztery nowe kolumny do bazy danych?

Nie ma problemu - dodaj cztery nowe właściwości do skojarzonego POCO (4 linie kodu) i zmapuj.

Znosi wiele bólu z ciągle zmieniających się wymagań, które są faktem w wielu projektach.

2

dodam powód, który jest bardzo ważny dla tworzenia niestandardowych funkcjonalności w oparciu o wspólną bazę kodu:

z płynną można przesłonić odwzorowania, aby dodać nowe pole. Zmiany w istniejących mapowaniach (nadklasy) są automatycznie włączane do dostosowywania/gałęzi. Byłem zmuszony użyć Fluent, aby uniknąć oddzielnego pliku .hbm/xml dla każdego klienta. Cieszę się, że to zrobiłem :)

+0

Przepraszamy, ale czy możesz wyjaśnić, w jaki sposób jest to lepsze niż aktualizacja xml? – ArtB

Powiązane problemy