Architechture 3




1. entities package: here we create classes of products.
a) abstracts
package main.entities.abstracts;

public interface Entity {
}
b) concretes
package main.entities.concretes;

import main.entities.abstracts.Entity;

public class Product implements Entity {
private int id;
private int categoryId;
private String name;
private double unitPrice;
private int unitsInStock;

public Product() {
}

public Product(int id, int categoryId, String name, double unitPrice, int unitsInStock) {
this.id = id;
this.categoryId = categoryId;
this.name = name;
this.unitPrice = unitPrice;
this.unitsInStock = unitsInStock;
}

public int getId() {
return id;
}

public Product setId(int id) {
this.id = id;
return this;
}

public int getCategoryId() {
return categoryId;
}

public Product setCategoryId(int categoryId) {
this.categoryId = categoryId;
return this;
}

public String getName() {
return name;
}

public Product setName(String name) {
this.name = name;
return this;
}

public double getUnitPrice() {
return unitPrice;
}

public Product setUnitPrice(double unitPrice) {
this.unitPrice = unitPrice;
return this;
}

public int getUnitsInStock() {
return unitsInStock;
}

public Product setUnitsInStock(int unitsInStock) {
this.unitsInStock = unitsInStock;
return this;
}
}
2. dataAccess package: here we create classes that connect with DB.
a) abstracts
package main.dataAccess.abstracts;

import main.entities.concretes.Product;

import java.util.List;

public interface ProductDao {
void add(Product product);

void update(Product product);

void delete(Product product);

Product get(int id);

List<Product> getAll();
}
b) concretes
package main.dataAccess.concretes;

import main.dataAccess.abstracts.ProductDao;
import main.entities.concretes.Product;

import java.util.List;

public class HibernateProductDao implements ProductDao {
@Override
public void add(Product product) {
System.out.println("Hibernate ile eklendi: " + product.getName());
}

@Override
public void update(Product product) {

}

@Override
public void delete(Product product) {

}

@Override
public Product get(int id) {
return null;
}

@Override
public List<Product> getAll() {
return null;
}
}
package main.dataAccess.concretes;

import main.dataAccess.abstracts.ProductDao;
import main.entities.concretes.Product;

import java.util.List;

public class AbcProductDao implements ProductDao {
@Override
public void add(Product product) {
System.out.println("Abc ile eklendi: " + product.getName());
}

@Override
public void update(Product product) {

}

@Override
public void delete(Product product) {

}

@Override
public Product get(int id) {
return null;
}

@Override
public List<Product> getAll() {
return null;
}
}
3. some external classes: here might be some classes that do some logical things(generally 
written by other developers) that we want to integrate to our system.
package main.jLogger;

public class JLoggerManager {
public void log(String message) {
System.out.println("J logger ile loglandi " + message);
}
}
4. core package: this package specifically for external classes that we want to use. This is
the best practice to use external classes implementing this way.
a) abstract
package main.core.abstracts;

public interface LoggerService {
void logToSystem(String message);
}
b) concretes
package main.core.concretes;

import main.core.abstracts.LoggerService;
import main.jLogger.JLoggerManager;

public class JLoggerManagerAdapter implements LoggerService {
@Override
public void logToSystem(String message) {
JLoggerManager manager = new JLoggerManager();
manager.log(message);
}
}
5. business package: this package is for connecting kind of client with our system. We should 
not write logis inside dataAccess. This is best practice to do it inside business package.
a) abstracts
package main.business.abstracts;

import main.entities.concretes.Product;

import java.util.List;

public interface ProductService {
void add(Product product);

List<Product> getAll();
}
b) concretes
package main.business.concretes;

import main.business.abstracts.ProductService;
import main.core.abstracts.LoggerService;
import main.dataAccess.abstracts.ProductDao;
import main.entities.concretes.Product;

import java.util.List;

public class ProductManager implements ProductService {

private ProductDao productDao;
private LoggerService loggerService;

public ProductManager(ProductDao productDao, LoggerService loggerService) {
this.productDao = productDao;
this.loggerService = loggerService;
}

@Override
public void add(Product product) {
if (product.getCategoryId() == 1) {
System.out.println("Bu kategoride urun kabul edilmiyor");
return;
}
this.productDao.add(product);
this.loggerService.logToSystem("urun eklendi: " + product.getName());
}

@Override
public List<Product> getAll() {
return null;
}
}

Комментарии

Популярные сообщения из этого блога

Lesson1: JDK, JVM, JRE

SE_21_Lesson_11: Inheritance, Polymorphism

SE_21_Lesson_9: Initialization Blocks, Wrapper types, String class