Tema 4: Diseño de la Capa de Datos

Anuncio
escuela técnica superior
de ingeniería informática
Diseño de la capa de
datos para el POS
Departamento de
Lenguajes y Sistemas Informáticos
Ingeniería del Software de Gestión III
Índice
• Introducción
• Estrategias
•
•
•
•
Identificadores únicos
Conexiones
Clases persistentes
Navegabilidad
• Solución
Capa de negocio
pos.domain
1..*
<<interface>>
IPOSProcessor
boolean cancelOrder(String orderId);
List listOrders();
boolean placeOrder(Order o);
Order retrieveOrder();
1
Order
Address
deliverto
stores
-
orderID: String
deliverto: Addres
payment: CreditCard
timeplaced: Date
details:List
placedbyCustomer: String
- city: String
- email: String
- fax: String
- phone: String
- name: String
- state: String
- street: String
- zipcode: int
getters/setters
1
getters/setters
payment
1..*
POSProcessor
CreditCard
1..*
1
Detail
Product
- holder: String
- number: String
- month: int
- year: int
- note: String
- quantity: int
- product: Product
- productID: String
- description: String
- price: int
getters/setters
getters/setters
getters/setters
Modelo de datos
1..*
1
1
Address
1..*
deliverto
CreditCard
OID: varchar(50) = <<PK>>
holder: varchar(50)
number: varchar(50)
month: int
year: int
payment
Order
OID : varchar(50) = <<PK>>
city: varchar(50)
email: varchar(50)
fax: varchar(50)
phone: varchar(50)
name: varchar(50)
street: varchar(50)
zipcode: int
OID: varchar(50) = <<PK>>
orderid: varchar(50)
addressOID: varchar(50) = <<FK>>
creditcardOID: varchar(50)=<<FK>>
timeplaced: bigint
placedbyCustomer: varchar(50)
1..*
1
Detail
Product
OID: varchar(50) = <<PK>>
orderOID: varchar(50)=<<FK >>
productOID: varchar(50)=<<FK >>
note: varchar(250)
quantity: int
OID: varchar(50) = <<PK>>
productID: varchar(50)
description: varchar(250)
price: int
Índice
• Introducción
• Estrategias
•
•
•
•
Identificadores únicos
Conexiones
Clases persistentes
Navegabilidad
• Solución
Generador de identificadores únicos
pos.utils
<<Singleton >>
UIDGenerator
+ String getKey()
Generador de identificadores únicos
package pos.utils;
import java.security.SecureRandom;
public class UIDGenerator {
private static UIDGenerator guidgen;
private SecureRandom random;
private UIDGenerator() {
this.random = new SecureRandom();
}
public static synchronized UIDGenerator getInstance() {
if (guidgen == null) {
guidgen = new UIDGenerator();
}
return guidgen;
}
public String getKey() {
String key = "" + System.currentTimeMillis()
+ Long.toHexString(random.nextInt());
return key;
}
}
Índice
• Introducción
• Estrategias
•
•
•
•
Identificadores únicos
Conexiones
Clases persistentes
Navegabilidad
• Solución
ConnectionManager
<<Singleton>>
ConnectionManager
- Driver dBDriver
- String dBUri
- String driverName
- String password
- String username
+ Connection checkOut()
+ void checkIn(Connection conn)
ConnectionManager
package pos.data;
import java.sql.*;
public class ConnectionManager {
private static ConnectionManager cm;
private Driver dBDriver = null;
private static final String dBUri = "jdbc:mysql://127.0.0.1:3306/pos";
private static final String driverName = "com.mysql.jdbc.Driver";
private static final String password = "practica";
private static final String username = "practica";
private ConnectionManager() {
try {
dBDriver = (Driver) Class.forName(driverName).newInstance();
DriverManager.registerDriver(dBDriver);
} catch (Exception e) {
System.err.println("Unable to register JDBC Driver");
e.printStackTrace();
}
}
public static synchronized ConnectionManager getInstance() {
if (cm == null) {cm = new ConnectionManager();}
return cm;
}
...
ConnectionManager
public Connection checkOut() {
Connection conn = null;
try {
conn = DriverManager.getConnection(dBUri, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public void checkIn(Connection conn) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
protected void finalize() {
System.out.println("Llamando a finalize de ConnectionManager");
try {
DriverManager.deregisterDriver(dBDriver);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Índice
• Introducción
• Estrategias
•
•
•
•
Identificadores únicos
Conexiones
Clases persistentes
Navegabilidad
• Solución
Clases persistentes
pos.domain
1..*
<<interface>>
IPOSProcessor
boolean cancelOrder(String orderId);
List listOrders();
boolean placeOrder(Order o);
Order retrieveOrder();
1
Order
Address
deliverto
stores
-
orderID: String
deliverto: Addres
payment: CreditCard
timeplaced: Date
details:List
placedbyCustomer: String
- city: String
- email: String
- fax: String
- phone: String
- name: String
- state: String
- street: String
- zipcode: int
getters/setters
1
getters/setters
payment
1..*
POSProcessor
CreditCard
1..*
1
Detail
Product
- holder: String
- number: String
- month: int
- year: int
- note: String
- quantity: int
- product: Product
- productID: String
- description: String
- price: int
getters/setters
getters/setters
getters/setters
DAO
• Por cada clase persistente, tendremos en
la capa de acceso:
• Una interfaz (IClassnameDAO)
• Una clase que implementa dicha interfaz
(JDBCClassnameDAO)
Capa de datos
pos.data
<<interface>>
ICreditCardDAO
<<Singleton >>
ConnectionManager
<<interface>>
IProductDAO
- Driver dBDriver
- String dBUri
- String driverName
- String password
- String username
+ Connection checkOut()
+ void checkIn(Connection conn)
JDBCCreditCardDAO
<<interface>>
IOrderDAO
JDBCProductDAO
<<interface>>
IDetailDAO
<<interface>>
IAddressDAO
JDBCOrderDAO
JDBCDetailDAO
JDBCAddressDAO
Definición de las interfaces DAO
<<interface>>
IProductDAO
<<interface>>
IDetailDAO
void delete(...)
void insert(...)
List select(...)
List selectAllProducts(...)
Product select(...)
<<interface>>
IOrderDAO
Void delete(...)
List selectAllOrders(...)
void insertOrder(...)
Order selectOldOrder(...)
<<interface>>
IAddressDAO
<<interface>>
ICreditCardDAO
void delete(...)
void insert(...)
Address select(...)
void delete(...)
void insert(...)
CreditCard select(...)
Índice
• Introducción
• Estrategias
•
•
•
•
Identificadores únicos
Conexiones
Clases persistentes
Navegabilidad
• Solución
Navegabilidad
• Nos permite:
• Refinar las definiciones de los IClassnameDAO
• Establecer relaciones entre los distintos
IClassnameDAO
• Establecer una política para la gestión de
conexiones
Navegabilidad
pos.domain
1..*
<<interface>>
IPOSProcessor
boolean cancelOrder(String orderId);
List listOrders();
boolean placeOrder(Order o);
Order retrieveOrder();
1
Order
Address
deliverto
stores
-
orderID: String
deliverto: Addres
payment: CreditCard
timeplaced: Date
details:List
placedbyCustomer: String
- city: String
- email: String
- fax: String
- phone: String
- name: String
- state: String
- street: String
- zipcode: int
getters/setters
1
getters/setters
payment
1..*
POSProcessor
CreditCard
1..*
1
Detail
Product
- holder: String
- number: String
- month: int
- year: int
- note: String
- quantity: int
- product: Product
- productID: String
- description: String
- price: int
getters/setters
getters/setters
getters/setters
Navegabilidad
pos.data
<<interface>>
ICreditCardDAO
<<Singleton >>
ConnectionManager
uses
<<interface>>
IProductDAO
List selectAllProducts()
Product select(Connection conn, String productOID)
String selectProductOID(Connection conn, String productid)
void delete(Connection conn, String creditCardOID)
void insert(Connection conn, String creditCardOID, CreditCard c)
CreditCard select(Connection conn, String creditCardOID)
- Driver dBDriver
- String dBUri
- String driverName
- String password
- String username
+ Connection checkOut()
+ void checkIn(Connection conn)
uses
JDBCCreditCardDAO
<<interface>>
IOrderDAO
JDBCProductDAO
<<interface>>
IDetailDAO
void delete(String OrderID)
List selectAllOrders()
void insertOrder(Order o)
Order selectOldOrder()
void delete(Connection conn, String orderOID)
void insert(Connection conn, List details, String orderOID)
List select(Connection conn, String orderOID)
JDBCOrderDAO
<<interface>>
IAddressDAO
void delete(Connection conn, String addressOID)
void insert(Connection conn, String addressOID, Address a)
Address select(Connection conn, String addressOID)
JDBCDetailDAO
JDBCAddressDAO
Índice
• Introducción
• Estrategias
•
•
•
•
Identificadores únicos
Conexiones
Clases persistentes
Navegabilidad
• Solución
Solución
pos.domain
1..*
1
<<interface >>
IPOSProcessor
Order
Address
deliverto
stores
boolean cancelOrder(String orderId);
List listOrders();
boolean placeOrder(Order o);
Order retrieveOrder();
- orderID: String
- deliverto: Addres
- payment: CreditCard
- timeplaced: Date
- details:List
- placedbyCustomer: String
-
getters/setters
city: String
email: String
fax: String
phone: String
name: String
state: String
street: String
zipcode: int
1
<<Singleton >>
UIDGenerator
getters/setters
payment
1..*
+ String getKey()
POSProcessor
CreditCard
1..*
- odao: IOrderDAO
-
pos.utils
holder: String
number: String
month: int
year: int
getters/setters
1
Detail
Product
- note: String
- quantity: int
- product: Product
- productID: String
- description: String
- price: int
getters/setters
getters/setters
uses
uses
pos.data
<<interface >>
ICreditCardDAO
<<Singleton>>
ConnectionManager
uses
<<interface>>
IProductDAO
List selectAllProducts()
Product select(Connection conn, String productOID)
String selectProductOID(Connection conn, String productid)
void delete(Connection conn, String creditCardOID)
void insert(Connection conn, String creditCardOID, CreditCard c)
CreditCard select(Connection conn, String creditCardOID)
- Driver dBDriver
- String dBUri
- String driverName
- String password
- String username
+ Connection checkOut()
+ void checkIn(Connection conn)
uses
JDBCCreditCardDAO
<<interface>>
IOrderDAO
<<interface>>
IDetailDAO
JDBCProductDAO
void delete(Connection conn, String orderOID)
void insert(Connection conn, List details, String orderOID)
List select(Connection conn, String orderOID)
void delete(String OrderID)
List selectAllOrders()
void insertOrder(Order o)
Order selectOldOrder()
<<interface>>
IAddressDAO
void delete(Connection conn, String addressOID)
void insert(Connection conn, String addressOID, Address a)
Address select(Connection conn, String addressOID)
JDBCOrderDAO
JDBCDetailDAO
JDBCAddressDAO
!Gracias!
• ¿Podemos mejorar esta lección?
Mándanos un email a [email protected]
Visite la web: www.lsi.us.es
Descargar