Byłem ubrany w uległość i rozpocząłem naukę Fluent NHibernate (bez wcześniejszego doświadczenia NHibernate). W moim projekcie programuję interfejsy w celu zmniejszenia sprzężenia itp. Oznacza to, że prawie wszystko odnosi się do interfejsu zamiast konkretnego typu (wiadomość zamiast wiadomości). Myślą, która kryje się za tym, jest pomoc w sprawieniu, by był on bardziej testowalny dzięki możliwości kpić z zależności.Programowanie do interfejsów podczas mapowania z Fluent NHibernate
Jednak (Fluent) NHibernate nie podoba się, gdy próbuję mapować na interfejsy zamiast konkretnych klas. Sprawa jest prosta - według Fluent Wiki, jest inteligentny, aby określić pole ID z mojej klasy, jak na przykład
int Id { get; private set; }
aby uzyskać typową automatycznie wygenerowany klucz podstawowy. Jednak, że działa tylko z konkretnych klas - Nie mogę określić poziom dostępu na interfejsie, gdzie ta sama linia musi być
int Id { get; set; }
i myślę, że neguje czyniąc seter prywatny w konkretnej klasy (the Pomysł polega na tym, że tylko NHibernate powinien kiedykolwiek ustawić ID przypisany przez DB).
Chyba po prostu rozgłaszam publiczność i spróbuję uniknąć pokusy pisania na jej temat. Ale czy ktoś ma pojęcie, co byłoby "właściwym", najlepszym sposobem na stworzenie właściwe pole klucza podstawowego, do którego może pisać tylko NHibernate, a jednocześnie programować tylko do interfejsów?
AKTUALIZACJA
Z tego co rozumiem, po dwie odpowiedzi poniżej ze mookid i James Gregory, mogę równie dobrze być na niewłaściwym torze - nie powinno być powodem do mnie, aby mieć interfejs do jednego podmiotu tak jak mam teraz. Wszystko dobrze i dobrze. Domyślam się, że moje pytanie staje się - czy nie ma powodu, aby programować w 100% przeciwko interfejsowi dla dowolnych podmiotów? A jeśli istnieje nawet jedna sytuacja, w której może to być uzasadnione, czy można to zrobić za pomocą (Fluent) NHibernate?
Pytam, ponieważ nie wiem, nie krytycznie. Dzięki za odpowiedzi. :)
To zabawne, ponieważ niektórzy programiści, których szanuję przypadkowo, przyjęli anty-wzór interfejsu użytkownika. Bardziej błędem jest to, co robią zawodowcy niż nowicjuszami, ponieważ debiutanci ledwo wiedzą, dlaczego interfejsy są najważniejsze. –
Jeśli nie tworzysz interfejsów dla swoich podmiotów, to jak testujesz zachowanie swoich jednostek? Dokładniej, jak wyśmiewać zależności tego bytu? –
Kiedy ludzie mówią, że programują interfejsy, a nie implementacje, nie mają na myśli konstrukcji języka interfejsu. Chodzi o to, że starają się zaciemnić kod, którego używasz tak często, jak to tylko możliwe. To znaczy. Gdy używasz modułu wyliczającego w słowniku, nie zakładaj, że Current nie wyrzuci przed wywołaniem movenext, to jest niezdefiniowane i może się zmienić. – stonemetal