: Sample Project กับ Model, Repository และ Service
ถาม : จาก part 3 ที่ผ่านไป อยากให้จำลองการทำงานแบบใช้ concept ของ model, repository และ service ด้วยกลไกของภาษาจาวาแบบไม่ซับซ้อน
ตอบ : ถ้าอย่างนั้นสร้าง project ใหม่ แล้วลองทำตามข้าพเจ้า
- สร้าง project ใหม่ชื่อ spring_sample
- สร้าง package ชื่อ com.sample.model สำหรับจำลอง model
- สร้าง package ชื่อ com.sample.repository สำหรับจำลอง repository
- สร้าง package ชื่อ com.sample.service สำหรับจำลอง service
- สร้าง package ชื่อ com.sample.server สำหรับจำลอง server (คลาสทดสอบพร้อม main เมธอด)
- สร้าง class ชื่อ Customer ให้เป็น bean ใน model ดังนี้
package com.sample.model;
public class Customer {
private String firstName;
private String lastName;
public Customer() { }
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
- สร้าง interface ชื่อ CustomerRepository เก็บไว้ใน repository บังคับกติกา findAll (สมมติว่าสามารถดึงข้อมูลทั้งหมดจาก database) ดังนี้
package com.sample.repository;
import java.util.List;
import com.sample.model.Customer;
public interface CustomerRepository {
List<Customer> findAll();
}
- เมื่อมี interface (เจ้า spring จะทำงานกับ interface เป็นสำคัญนะ) ก็ต้องมีการ implementation ไปใช้งาน ดังนั้นสร้าง class ชื่อ HibernateCustomerRepositoryImpl เพื่อรับเอากติกาดังกล่าวไปใช้ (ชื่อยาวไปนิด แต่เป็นข้อแนะนำที่ดีในการตั้งชื่อให้สื่อความหมายนะครับ ในที่นี้ใช้คำว่า Hibernate ด้วย คือจะสื่อสมมติว่าใช้ Hibernate เป็นตัวจัดการข้อมูลระหว่างโปรแกรมนี้กับ database นั่นเอง)
package com.sample.repository;
import java.util.ArrayList;
import java.util.List;
import com.sample.model.Customer;
public class HibernateCustomerRepositoryImpl implements CustomerRepository {
public List<Customer> findAll() {
List<Customer> customers = new ArrayList<Customer>();
Customer customer = new Customer();
customer.setFirstName("Phai");
customer.setLastName("ProSbeginner");
customers.add(customer);
return customers;
}
}
ในที่นี้เราก็ให้ว่าเมธอด findAll เมื่อถูกเรียกให้ทำงานจะไปค้นหาข้อมูลใน database มา คือเอามาใส่ไว้ใน List สมมติว่าได้ข้อมูลดังข้างต้น
- ทีนี้ก็ service เริ่มโดยสร้าง interface ชื่อ CustomerService บังคับให้มี findAll (เพื่อในอนาคตจะให้ไปเรียก repository) ดังนี้
package com.sample.service;
import java.util.List;
import com.sample.model.Customer;
public interface CustomerService {
List<Customer> findAll();
}
- แล้วจึง implementation มันในชื่อ CustomerServiceImpl การทำงานให้สร้าง object ของ repository ที่จะไปดึงข้อมูลมาให้ ดังนี้
package com.sample.service;
import java.util.List;
import com.sample.model.Customer;
import com.sample.repository.CustomerRepository;
import com.sample.repository.HibernateCustomerRepositoryImpl;
public class CustomerServiceImpl implements CustomerService {
private CustomerRepository customerRepository = new HibernateCustomerRepositoryImpl();
public List<Customer> findAll() {
return customerRepository.findAll();
}
}
- สุดท้ายแล้วก็สร้าง class ทดสอบชื่อ Application เรียกไปที่ service แล้วถามหา findAll ในที่นี้มีข้อมุลเดียวก็เลยเรียกไปที่ get(0) ก็จะได้ชื่อออกมาครับ
package com.sample.server;
import com.sample.service.CustomerService;
import com.sample.service.CustomerServiceImpl;
public class Application {
public static void main(String[] args) {
CustomerService service = new CustomerServiceImpl();
System.out.println(service.findAll().get(0).getFirstName());
}
}
ผมอยากให้สังเกตการเรียกใช้งานที่เราจะมุ่งไปยัง interface เป็นสำคัญ ลองทำความเข้าใจไปทีละน้อย ส่วน part หน้า เราจะมาควบคุมการเรียกลักษณะคล้ายกันนี้ด้วย xml ครับ
ขอบคุณสำหรับ บทความดีๆครับ
ตอบลบ