ฉันกำลังพยายามฝึกฝนทักษะรูปแบบการออกแบบของฉันและฉันก็สงสัยว่าความแตกต่างระหว่างรูปแบบเหล่านี้คืออะไร? ทั้งหมดนี้ดูเหมือนว่าเป็นสิ่งเดียวกัน - สรุปลอจิกฐานข้อมูลสำหรับเอนทิตีเฉพาะดังนั้นรหัสการโทรจึงไม่มีความรู้เกี่ยวกับเลเยอร์การคงอยู่ที่อยู่เบื้องหลัง จากการวิจัยสั้น ๆ ของฉันพวกเขาทั้งหมดมักใช้วิธีการ CRUD มาตรฐานของคุณและสรุปรายละเอียดเฉพาะฐานข้อมูล
นอกเหนือจากรูปแบบการตั้งชื่อ (เช่น CustomerMapper กับ CustomerDAO เทียบกับ CustomerGateway กับ CustomerRepository) ความแตกต่างคืออะไรถ้ามี? หากมีความแตกต่างคุณจะเลือกอย่างใดอย่างหนึ่งเมื่อใด
ในอดีตฉันจะเขียนโค้ดคล้ายกับสิ่งต่อไปนี้ (ง่ายขึ้นโดยธรรมชาติ - ปกติฉันจะไม่ใช้คุณสมบัติสาธารณะ):
public class Customer
{
public long ID;
public string FirstName;
public string LastName;
public string CompanyName;
}
public interface ICustomerGateway
{
IList<Customer> GetAll();
Customer GetCustomerByID(long id);
bool AddNewCustomer(Customer customer);
bool UpdateCustomer(Customer customer);
bool DeleteCustomer(long id);
}
และมีCustomerGateway
คลาสที่ใช้ตรรกะฐานข้อมูลเฉพาะสำหรับวิธีการทั้งหมด บางครั้งฉันจะไม่ใช้อินเทอร์เฟซและสร้างวิธีการทั้งหมดบน CustomerGateway แบบคงที่ (ฉันรู้ฉันรู้ว่ามันทำให้ทดสอบได้น้อยลง) ดังนั้นฉันจึงสามารถเรียกมันว่า:
Customer cust = CustomerGateway.GetCustomerByID(42);
นี่ดูเหมือนจะเป็นหลักการเดียวกันสำหรับรูปแบบ Data Mapper และ Repository รูปแบบ DAO (ซึ่งเหมือนกับเกตเวย์ฉันคิดว่า?) ดูเหมือนว่าจะสนับสนุนเกตเวย์เฉพาะฐานข้อมูล
ฉันพลาดอะไรไปรึเปล่า? ดูเหมือนจะแปลกเล็กน้อยที่มี 3-4 วิธีในการทำสิ่งเดียวกัน