achieving persistence ignorance with nhibernate
DESCRIPTION
Achieving Persistence Ignorance with NHibernate. James Kovacs JamesKovacs.com [email protected]. What is Persistence Ignorance?. POCO – Plain Old CLR Object No persistence-related code Only business logic public class Customer { public string Name { get; } - PowerPoint PPT PresentationTRANSCRIPT
![Page 2: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/2.jpg)
![Page 3: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/3.jpg)
![Page 4: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/4.jpg)
![Page 5: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/5.jpg)
![Page 6: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/6.jpg)
![Page 7: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/7.jpg)
![Page 8: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/8.jpg)
![Page 9: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/9.jpg)
![Page 10: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/10.jpg)
What is Persistence Ignorance?
• POCO – Plain Old CLR Object• No persistence-related code• Only business logic
public class Customer { public string Name { get; } public Location Address { get; } public IList<Order> Orders { get; } public void AddOrder(Order o) {}}
![Page 11: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/11.jpg)
Why is Persistence Ignorance Important?
• Separation of concerns• Single responsibility• Loose coupling• Testability• Re-use
![Page 12: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/12.jpg)
NHibernate and PI
• No special persistence-related base class• No marker or callback interfaces• No persistence-related attributes• NHibernate domain class:public class Customer { public string Name { get; } public Location Address { get; } public IList<Order> Orders { get; } public void AddOrder(Order o) {}}
![Page 13: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/13.jpg)
NHibernate API
Configuration Class for bootstrapping NHibernate
ISessionFactory Factory for creating sessions
ISession Roughly analogous to a database connection
ITransaction Abstracts underlying transaction semantics
IQuery String-based query API aka HQL
ICriteria Object-based query API aka Criteria
![Page 14: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/14.jpg)
Key Features for PI
• Persistence by reachability• Automatic dirty checking• Transparent lazy loading
![Page 15: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/15.jpg)
Resources
• NHibernate (http://www.nhibernate.org)• NHForge (http://www.nhforge.org)• NHibernate Resources (http://www.hibernate.org/365.html)• NHUsers Google Group (http://groups.google.com/group/nhusers)• ActiveWriter
(http://using.castleproject.org/display/Contrib/ActiveWriter)• The Bookshelf
(http://www.jameskovacs.com/blog/TheBookshelf.aspx)
![Page 16: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/16.jpg)
![Page 17: Achieving Persistence Ignorance with NHibernate](https://reader036.vdocument.in/reader036/viewer/2022062310/568166da550346895ddafaec/html5/thumbnails/17.jpg)