Slide 11 - North South University
Download
Report
Transcript Slide 11 - North South University
Designing a Persistence Framework
With Patterns
Presented By
Dr. Shazzad Hosain
What is Framework
An extendable set of objects for related function.
Example: GUI Framework, such as Java’s AWT or Swing
Criteria of a framework: It provides an implementation for
the core and unvarying functions, and includes a mechanism to
allow plug in or to extend the functions.
Example: Developer can extend swing classes
Frameworks provide high degree of reuse.
Persistent Objects
Objects that are stored in persistent storage and brought into local
memory during application use, e.g. ProductSpecification
Storage mechanisms
Object Databases
Relational Databases
Other formats e.g. XML etc.
Persistence Framework
Persistence Framework: A general purpose, reusable and
extendable set of types that provide functionality to support
persistent objects.
Persistence Service (or Subsystem): Actually provides the
service, and will be created with a persistence framework.
O-R Mapping Service: A persistence service that is written to
work with RDBs.
Requirements for the Persistence
Service and Framework
The framework should provide the following functions
Store and retrieve objects in a persistent storage mechanism
Commit and rollback transactions.
Design should be extendable to support different storage mechanisms
and formats, such as RDBs, records in flat files or XML in files.
Key Ideas for Persistence Framework
Mapping
Object identity
Database mapper
Materialization and dematerialization
Caches
Transaction state of object
Transaction operations
Lazy materialization
Virtual proxies
Pattern: Representing Objects as Tables
How to map an object to a record or relational database schema?
Mapping objects and tables
Pattern: Object Identifier
Object Identifier pattern proposes assigning an object
identifier (OID) to each record and object (or proxy of an object)
An OID is usually an alphanumeric value
Objects identifiers link objects and records
Accessing a Persistence Service with
a Facade
The PersistenceFacade
Class Class
Pattern: Database Mapper / Broker
PersistenceFacade – as true of all facades – does not do the work
itself, but delegates requests to subsystem objects
Who should be responsible for materialization and
dematerialization of objects from a persistent store?
Information Expert (or Expert) suggests the class itself
But violates low coupling and high cohesion
Direct Mapping vs. Indirect Mapping
Direct Mapping: If the class saves data itself
Workable if the database related code is automatically generated and
injected into the class by a post-processing compiler
Class Sale {
total = …
float getTotal () {
}
…….
void saveObject () {
SQL code goes here
}
}
Class SaleMapping:
{
Indirect
Uses other objects to do the maping for
total = …
persistent
objects.
float getTotal () {
}
…….
}
PersistenceFacade
Class PersistenceFacade{
// ….
public Object get (OID oid, Class persistenceClass) {
// an Imapper is keyed by the Class of the persistence Object
Imapper mapper = (IMapper) mappers.get (persistenceClass)
// delegate
return mapper.get ( oid ) ;
}
}
HashMap <IMapper> mappers = new HashMap <IMapper> () ;
mappers.put ( new ProducSpecification (), new ProductSpecificationRDBMapper () ) ;
Mappers.put ( new Sale (), new SaleRDBMapper () ) ;
Class PersistenceFacade{
// ….
public Object get (OID oid, Class persistenceClass) {
// an Imapper is keyed by the Class of the persistence Object
Imapper mapper = (IMapper) mappers.get (persistenceClass)
// delegate
return mapper.get ( oid ) ;
}
}
Class ProductSpecificationRDBMapper {
// ….
Object get (OID oid) {
ProductSpecification ps = new ProductSpecification () ;
SQL statements to get produc specification from tbl_product_specification
ps.setProductName (pName) ;
ps.setPrice (pPrice) ;
return ps ;
Hand Crafted mapper
}
// ….
}
Metadata-Based Mapper
Dynamically generate the mapping from an object schema to
another schema (such as relational)
Mapping can be made also in external property files
Framework Design with the
Template Method Pattern
Template Method pattern is at the heart of framework design
Familiar to most OO programmers, though not by name
The idea is to define a method (the template method) in a
superclass that defines the skeleton of an algorithm
Template method invokes other methods some of which may be
overridden in a subclass
Materialization with the
Template Method pattern
If we were to program two / three mapper classes there will be
some commonality in the code
If ( object in cache )
return it
Else
create the object from its representation in storage
save object in cache
return it
The point of variation is how the object is created from storage
Template Method for mapper objects
DB Record
Only table name
Object from DB Record
Apply Template Again
Overriding the hook method
DB Record
Object from DB Record
References
Chapter 34 of “Applying UML and Patterns – An Introduction to
Object-Oriented Analysis and Design and the Unified Process” –
by Craig Larman