230 likes | 284 Views
Object Relational Mapping . John M. Miller Perpetual Data Systems. John M. Miller jMiller@pdata.com. Independent Software Architect, Designer & Developer PDC 2002 Speaker Collaborator on adding advanced business rule support to a commercial .Net application framework
E N D
Object Relational Mapping John M. Miller Perpetual Data Systems
John M. MillerjMiller@pdata.com • Independent Software Architect, Designer & Developer • PDC 2002 Speaker • Collaborator on adding advanced business rule support to a commercial .Net application framework • Member of a team submitting a response to the OMG request for a method for formalizing business rules • XSLT transformations from ORM conceptual models into .NET entity business object implementation
Overview • What is Object Relational Mapping • Why did Microsoft back away? • Is OR Mapping dead? • What if it isn't? • What does it mean for .NET application architectures? • Which comes first the data chicken or object egg?
What is Object Relational Mapping • Something that persists objects into relational databases • Can be • a software layer using dynamic SQL generation • a method of generating static SQL • Implicit with Domain object models • DataSets need not apply
Why is OR Mapping Important? • Why are domain models important? • Because I said so • They abstract the data access code hiding the database details • They encapsulate the database in an interface that more closely matches the conceptual domain. • Object Models are more expressive for certain kinds of object interactions • Constraints become easier to implement • Object notation is a natural way of navigating a join path ACustomer.Orders[Number=1001].Items[Item=33].Product.Price • Constraints become easier to implement If AProduct.OnHand < AItem.Quantity Then raise BizRuleXceptn
Mappers • Domain models put the responsibility of reconciling design differences between the object and data models on the persistence layer • Persistence Layers • Static • Hand coded • Generated • Dynamic
Problems with OR Mapping • A weakness in the mapper limits the capability of the object model and in turn the capability of the application • No standard object query language • It can’t be done, not practical, a waste of time, etc. • It costs time and money • The dread impedance mismatch Wikipedia, C2
The Impedance Mismatch "When you notice that you're experiencing considerable pain, and you recognize that a substantial amount of the pain occurs in and around the interface between your code and the relational database, then you've found the Object/Relational Impedance Mismatch."
The Impedance Mismatch • Technical • Object Modeling and Data Modeling model fundamentally different things • Objects = Process • Data persistence is secondary • Data = Structure • What about static class diagrams? • Fundamentally flawed for complex structural modeling • Different Optimizations • Identification schemes are a problem
The Impedance Mismatch • Cultural • Created by different camps • Software Architects • The equally dread Database Administrator • Night & Day, Oil & Water, Pickles & Ketchup
The Impedance Mismatch • Reality • Neither domain models nor relational databases are going away. • Mappers are the price we pay for playing • Does it really exist?
So why did Microsoft back away? • ObjectSpaces • Billed as the Microsoft OR Mapper • Due to ship with Visual Studio 2005 • Rolled into WinFS • Because • Overlapped with some of the WinFS persistence story • Different APIs and Microsoft wanted to unify the APIs • Microsoft didn’t want to publish ObjectSpaces and then release an incompatible WinFS
So why did Microsoft back away? • WinFS • Windows object store • Due to ship with Longhorn • Pushed back until after Longhorn • Because • It wasn’t going to be ready in time • Object Persistence is harder than they thought • E12
So why did Microsoft back away? • To the net effect of leaving the market without a Microsoft OR Mapper until? 2008? 2009? 2010? • After first creating a buzz with the initial previews of ObjectSpaces and generating significant market momentum • Leaving the development world to wonder • Is OR Mapping dead?
Is OR Mapping Dead? • In the Microsoft community • Almost • There are several implementations that were available before ObjectSpaces that are still around • And a few created since • One that emulates the ObjectSpaces preview API • In the Java community • Not even close • Widely adopted • Not if, but which one
What if it isn't? • You could miss out on a technology that could make an application easier to design, implement and maintain • What is the .NET OR faithful to do? • Wait for Microsoft • Adopt an existing .NET OR Mapper until Microsoft does something • Try WORM • Adopt an existing .NET OR Mapper permanently • nHibernate is hot right now • Switch to Java • Like you, they get OR mappers
What does it mean for .NET application architectures? • XML and DataSets will continue to rule the DAL world until a dominate OR mapper for .NET appears • OR Mapping will continue to be used sparingly and grow as the mappers mature • Adoption rate in the .NET community should mimic the adoption rate for OR mappers in the Java community, but at faster pace • Should be widely adopted in the .NET community in 3-4 years • Hold your breath when WinFS ships
Which comes first the data chicken or object egg? • Lets say you are starting a new project with: • Complex business logic • Complex data relationships • Interested in creating a domain model and and relational database. • What do you do first? • Call me • Create the object model you want to persist • Create the data model that you know you need • If you do either 2 or 3 you have to deal with the dread impedance mismatch
The Object Egg • You create the domain object model first using standard OOA&D methods • Then derive the data structure from the object model • Problems • Number of tables • Normalization • Fragile Structures
The Data Chicken • You create the data model first using standard data modeling methods • The derive the domain model from the data model • Problems • You tell me? • Fidelity Loss
What then? • Conceptual Models • Design the structures conceptually first using a formal conceptual modeling method • Derive both the entity object model and data model from the conceptual model • Problems • Your domain object model needs to collaborate with the entity objects • No standards • Complex transformation
What next? • 2/1/2005 - San Diego .NET Developer Group Meeting • Implementing .NET Applications using Conceptual Models
Thank You! • jMiller@pdata.com • pdata.com/jMM • shrinkster.com/3bt • en.wikipedia.org/wiki/Object-relational_mapping • c2.com/cgi/wiki?ObjectRelationalMapping • theserverside.com/books/review/HibernateReview.tss • devx.com/vb2themax/Article/19894 • sddotnetdg.org/Events/SDDOTNET+Meetings/default.aspx