Khác nhau giữa Entity Model và Business Object (BO)

Nhân ngày hôm nay mấy anh em chia sẻ về Entity Model và Business Object, thấy hay nên tớ note lại vài dòng.

Cảm ơn anh Vũ Thanh Tùng đã chia sẻ 😉

Định nghĩa

Về định nghĩa thì:

  • Entity Model là các object map trực tiếp với database. Thường thì entity có kiểu dữ liệu giống hệt so với database.
  • Business Object là các object gần giống như Entity Model. Một số trường sẽ bị thay đổi để phù hợp với nghiệp vụ, logic code.

Câu hỏi đặt ra là: Tại sao cần sinh ra thằng BO làm gì? Dùng luôn thằng Entity thì sao?

Theo mình được biết thì BO sinh ra nhằm mục đích loose-coupling (giảm sự liên kết) của phần logic code với kiểu dữ liệu của database; sau này có thay đổi kiểu dữ liệu của bên nào thì cũng không ảnh hưởng tới bên còn lại. Chưa kể tới việc sử dụng entity mặc định của 1 số framework có thể gây ra vấn đề khi encode như tớ đã đề cập trong bài: [ASP.NET] Có nên sử dụng trực tiếp model được sinh tự động?

Ví dụ

Để dễ hiểu thì cùng lấy ví dụ là class ProductModelProductBO

package review;
public class ProductBO {
private int id;
private String name;
// MM/dd/yyyy
private String created_time;
/*
Getter and setter stuff
*/
}

view raw
ProductBOUS.java
hosted with ❤ by GitHub

package review;
public class ProductBO {
private int id;
private String name;
// dd/MM/yyyy
private String created_time;
/*
Getter and setter stuff
*/
}

view raw
ProductBOVN.java
hosted with ❤ by GitHub

package review;
import java.sql.Timestamp;
public class ProductModel {
private int id;
private String name;
private Timestamp created_time;
/*
Getter and setter stuff
*/
}

view raw
ProductModel.java
hosted with ❤ by GitHub

Trong database, kiểu dữ liệu của trường created_timetimestamp. Do vậy, thuộc tính created_time của ProductModel có cùng kiểu dữ liệu với database là timestamp. Tuy nhiên dữ liệu trả về lại mong muốn là 1 chuỗi có định dạng dd/MM/yyyy cho ngôn ngữ Việt Nam và MM/dd/yyyy cho ngôn ngữ US, nên ta cần chuyển đổi kiểu dữ liệu cho trường này theo từng ngữ cảnh khác nhau. Về cơ bản, quá trình chuyển đổi thể hiện qua sơ đồ sau:

Business object và entity model

Business object và entity model

Sau này project của bạn có thêm ngôn ngữ Nhật, Hàn, Đức,… thì bạn chỉ cần thêm ProductBO tương ứng để map với ngữ cảnh phù hợp.

Đơn giản. Phải không 😉

P/s: Về mấy cái pattern code thì người thích người không, mỗi người mỗi ý. Nên bạn có thể đọc chơi tham khảo. Thấy hay thì áp dụng 😉

Have fun!

Trả lời

Điền thông tin vào ô dưới đây hoặc nhấn vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s