Ich lese die offizielle Ihre erste NHibernate-basierte Anwendung .
Obwohl das Tutorial gut und leicht zu befolgen ist, frage ich mich, warum das Repository-Muster verwendet wird.
In den verschiedenen Add
, Update
, Remove
Methoden in der ProductRepository
Implementierung ist der Code fast identisch - sie alle mit Transaktionen, und der Unterschied ist in dem „Fleisch“ , dh Aufruf session.Save
int das Add
Verfahren, session.Delete
in dem remove
Verfahren. ( Die Seite fehlt HTML - Anker, aber Sie können die Seite für den entsprechenden Code wie suchen public void Remove
,public void Add
)
Dieser Code "fühlt sich einfach falsch an".
Warum verwendet der Autor das Repository-Muster - dient es nur zur Demonstration der Verwendung von NHibernate oder ist dies erforderlich oder aus einem anderen Grund?
Ps. Mein Hintergrund stammt von Ruby on Rails, das ActiveRecord verwendet. Daher versuche ich zu verstehen, wie NHibernate funktioniert / verwendet wird.
quelle
Antworten:
Das Repository-Muster ist nicht erforderlich. Wie bei allen anderen Mustern handelt es sich um eine "architektonische" Entscheidung, die Sie gegen Ihre geschäftlichen Anforderungen treffen müssen. Im Allgemeinen wird das Repository-Muster verwendet, um die "Entity Persistance Ingorance" zu implementieren, dh Ihre Entitäten wissen nichts darüber, wie sie sich auf Ihrem Speichergerät (Datenbank, XML, TextFile usw.) persistieren sollen. Wenn Sie zum Beispiel eine Entitätsadresse haben, enthält diese nicht die Persistenzlogik (Sie finden nirgendwo so etwas wie address.Save oder address.Update), aber Sie übergeben Ihre Entität an eine Repository-Methode, die für die Persistenz der Adresse zuständig ist Änderungen
quelle
Die Verwendung des Repository-Musters hat den Vorteil, dass Sie Ihre Datenzugriffsschicht nachahmen, sodass Sie den Code Ihrer Geschäftsschicht testen können, ohne DAL-Code aufrufen zu müssen. Es gibt noch andere große Vorteile, aber das scheint mir sehr wichtig zu sein.
quelle