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