Files
Thanh Nguyen Duc f92e6829c3 feat: Implement DAO Factory pattern (#3282)
* feat: implement dao factory

* feat: done implement dao factory

* test: Add unit test dao-factory

* doc: add document for dao-factory

* fix: h2 inmemory database to pass CI

* fix: unit test pipeline

* add license

* fix SonarQube

* add pom.xml

* fix: throw exception + refactor
2026-02-08 21:11:47 +02:00

74 lines
2.1 KiB
Plaintext

@startuml
package com.iluwatar.daofactory {
class App {
{static} void main(String[] args)
}
class Customer<T> {
T id
String name
}
interface CustomerDAO<ID> {
void save(Customer<ID> customer)
void update(Customer<ID> customer)
void delete(ID id)
List<Customer<ID>> findAll()
Optional<Customer<ID>> findById(ID id)
void deleteSchema()
}
abstract class DAOFactory {
{static} DAOFactory getDataSource(DataSourceType dataType)
{abstract} CustomerDAO createCustomerDAO()
}
enum DataSourceType {
H2
Mongo
FlatFile
}
class FlatFileCustomerDAO implements CustomerDAO<Long> {
void save(Customer<Long> customer)
void update(Customer<Long> customer)
void delete(Long id)
List<Customer<Long>> findAll()
Optional<Customer<Long>> findById(Long id)
void deleteSchema()
}
class H2CustomerDAO implements CustomerDAO<Long> {
void save(Customer<Long> customer)
void update(Customer<Long> customer)
void delete(Long id)
List<Customer<Long>> findAll()
Optional<Customer<Long>> findById(Long id)
void deleteSchema()
}
class FlatFileDataSourceFactory extends DAOFactory {
CustomerDAO createCustomerDAO()
}
class H2DataSourceFactory extends DAOFactory {
CustomerDAO createCustomerDAO()
}
class MongoCustomerDAO implements CustomerDAO<ObjectId> {
void save(Customer<ObjectId> customer)
void update(Customer<ObjectId> customer)
void delete(ObjectId id)
List<Customer<ObjectId>> findAll()
Optional<Customer<ObjectId>> findById(ObjectId id)
void deleteSchema()
}
class MongoDataSourceFactory extends DAOFactory {
CustomerDAO createCustomerDAO()
}
DataSourceType ..+ DAOFactory
DAOFactory ..+ App
App --> Customer
}
@enduml