JavaBeans
JavaBean là một lớp tuân theo các quy ước JavaBeans như được định nghĩa bởi Sun. Wikipedia có một bản tóm tắt khá hay về JavaBeans là gì :
JavaBeans là các thành phần phần mềm có thể tái sử dụng cho Java có thể được thao tác trực quan trong một công cụ xây dựng. Thực tế, chúng là các lớp được viết bằng ngôn ngữ lập trình Java tuân theo một quy ước cụ thể. Chúng được sử dụng để gói gọn nhiều đối tượng thành một đối tượng (bean), do đó chúng có thể được truyền xung quanh dưới dạng một đối tượng bean thay vì nhiều đối tượng riêng lẻ. JavaBean là một Đối tượng Java có khả năng tuần tự hóa, có một hàm tạo rỗng và cho phép truy cập vào các thuộc tính bằng các phương thức getter và setter.
Để hoạt động như một lớp JavaBean, một lớp đối tượng phải tuân theo các quy ước nhất định về đặt tên phương thức, xây dựng và hành vi. Các quy ước này cho phép có các công cụ có thể sử dụng, tái sử dụng, thay thế và kết nối JavaBeans.
Các quy ước bắt buộc là:
- Lớp phải có một hàm tạo mặc định công khai. Điều này cho phép khởi tạo dễ dàng trong khung chỉnh sửa và kích hoạt.
- Các thuộc tính lớp phải có thể truy cập được bằng cách sử dụng get, set và các phương thức khác (được gọi là phương thức accessor và phương thức mutator), theo một quy ước đặt tên tiêu chuẩn. Điều này cho phép dễ dàng kiểm tra tự động và cập nhật trạng thái bean trong các khung, nhiều trong số đó bao gồm các trình soạn thảo tùy chỉnh cho các loại thuộc tính khác nhau.
- Các lớp nên được tuần tự hóa. Điều này cho phép các ứng dụng và khung công tác lưu trữ, lưu trữ và khôi phục trạng thái của bean một cách đáng tin cậy theo cách độc lập với VM và nền tảng.
Do các yêu cầu này được thể hiện chủ yếu dưới dạng các quy ước thay vì thực hiện các giao diện, một số nhà phát triển xem JavaBeans là các Đối tượng Java cũ đơn giản tuân theo các quy ước đặt tên cụ thể.
POJO
Đối tượng Java cũ đơn giản hoặc POJO là thuật ngữ ban đầu được giới thiệu để chỉ định một đối tượng Java đơn giản, không triển khai bất kỳ javax.ejb
giao diện nào , trái ngược với EJB 2.x nặng (đặc biệt là Đậu thực thể, Đậu phiên không trạng thái không phải là IMO xấu). Ngày nay, thuật ngữ này được sử dụng cho bất kỳ đối tượng đơn giản nào không có thêm nội dung. Một lần nữa, Wikipedia thực hiện tốt công việc xác định POJO :
POJO là từ viết tắt của Plain Old Java Object. Tên được sử dụng để nhấn mạnh rằng đối tượng được đề cập là Đối tượng Java thông thường, không phải là đối tượng đặc biệt và đặc biệt không phải là Enterprise JavaBean (đặc biệt là trước EJB 3). Thuật ngữ này được đặt ra bởi Martin Fowler, Rebecca Parsons và Josh MacKenzie vào tháng 9 năm 2000:
"Chúng tôi tự hỏi tại sao mọi người lại chống lại việc sử dụng các vật thể thông thường trong hệ thống của họ và kết luận rằng đó là vì các vật thể đơn giản không có một cái tên lạ mắt. Vì vậy, chúng tôi đã cho chúng một cái, và nó được bắt rất độc đáo."
Thuật ngữ này tiếp tục mô hình các thuật ngữ cũ hơn cho các công nghệ không sử dụng các tính năng mới lạ mắt, chẳng hạn như POTS (Dịch vụ điện thoại cũ đơn giản) trong điện thoại và PODS (Cấu trúc dữ liệu cũ) được xác định trong C ++ nhưng chỉ sử dụng các tính năng ngôn ngữ C, và POD (Tài liệu cũ đơn giản) trong Perl.
Thuật ngữ này rất có thể đã đạt được sự chấp nhận rộng rãi vì nhu cầu về một thuật ngữ phổ biến và dễ hiểu tương phản với các khung đối tượng phức tạp. JavaBean là một POJO có khả năng tuần tự hóa, có hàm tạo không có đối số và cho phép truy cập vào các thuộc tính bằng các phương thức getter và setter. Enterprise JavaBean không phải là một lớp đơn lẻ mà là toàn bộ mô hình thành phần (một lần nữa, EJB 3 làm giảm độ phức tạp của Enterprise JavaBeans).
Khi các thiết kế sử dụng POJO trở nên phổ biến hơn, các hệ thống đã phát sinh mang đến cho POJO một số chức năng được sử dụng trong các khung và có nhiều sự lựa chọn hơn về lĩnh vực chức năng nào thực sự cần thiết. Hibernate và Spring là những ví dụ.
Đối tượng giá trị
Đối tượng giá trị hoặc VO là một đối tượng như java.lang.Integer
giữ các giá trị (do đó các đối tượng giá trị). Để có định nghĩa chính thức hơn, tôi thường tham khảo mô tả về Đối tượng giá trị của Martin Fowler :
Trong Mô hình kiến trúc ứng dụng doanh nghiệp, tôi đã mô tả Đối tượng giá trị như một đối tượng nhỏ, chẳng hạn như đối tượng Tiền hoặc phạm vi ngày. Tài sản quan trọng của họ là họ tuân theo ngữ nghĩa giá trị hơn là ngữ nghĩa tham chiếu.
Bạn thường có thể nói với họ vì khái niệm bình đẳng của họ không dựa trên danh tính, thay vào đó hai đối tượng giá trị bằng nhau nếu tất cả các trường của chúng bằng nhau. Mặc dù tất cả các trường đều bằng nhau, bạn không cần so sánh tất cả các trường nếu một tập hợp con là duy nhất - ví dụ mã tiền tệ cho các đối tượng tiền tệ là đủ để kiểm tra sự bằng nhau.
Một heuristic chung là các đối tượng giá trị nên hoàn toàn bất biến. Nếu bạn muốn thay đổi một đối tượng giá trị, bạn nên thay thế đối tượng bằng một đối tượng mới và không được phép cập nhật các giá trị của chính đối tượng giá trị - các đối tượng giá trị có thể cập nhật dẫn đến các vấn đề răng cưa.
Tài liệu J2EE ban đầu đã sử dụng đối tượng giá trị thuật ngữ để mô tả một khái niệm khác, cái mà tôi gọi là Đối tượng truyền dữ liệu . Họ đã thay đổi cách sử dụng và sử dụng thuật ngữ Chuyển đối tượng thay thế.
Bạn có thể tìm thấy một số tài liệu tốt hơn về các đối tượng giá trị trên wiki và bởi Dirk Riehle .
Đối tượng truyền dữ liệu
Đối tượng truyền dữ liệu hoặc DTO là một mẫu (chống) được giới thiệu với EJB. Thay vì thực hiện nhiều cuộc gọi từ xa trên EJB, ý tưởng là đóng gói dữ liệu trong một đối tượng giá trị có thể được truyền qua mạng: Đối tượng truyền dữ liệu. Wikipedia có một định nghĩa đúng đắn về đối tượng truyền dữ liệu :
Đối tượng truyền dữ liệu (DTO), trước đây gọi là đối tượng giá trị hoặc VO, là một mẫu thiết kế được sử dụng để truyền dữ liệu giữa các hệ thống con ứng dụng phần mềm. DTO thường được sử dụng cùng với các đối tượng truy cập dữ liệu để lấy dữ liệu từ cơ sở dữ liệu.
Sự khác biệt giữa các đối tượng truyền dữ liệu và đối tượng kinh doanh hoặc đối tượng truy cập dữ liệu là DTO không có bất kỳ hành vi nào ngoại trừ việc lưu trữ và truy xuất dữ liệu của chính nó (bộ truy cập và bộ biến đổi).
Trong kiến trúc EJB truyền thống, các DTO phục vụ các mục đích kép: đầu tiên, chúng giải quyết vấn đề là các thực thể không được tuần tự hóa; thứ hai, họ ngầm định nghĩa một giai đoạn lắp ráp trong đó tất cả dữ liệu được sử dụng bởi chế độ xem được tìm nạp và sắp xếp vào các DTO trước khi trả lại quyền điều khiển cho tầng trình bày.
Vì vậy, đối với nhiều người, DTO và VO là cùng một thứ (nhưng Fowler sử dụng VO có nghĩa là một cái gì đó khác như chúng ta đã thấy). Hầu hết thời gian, họ tuân theo các quy ước JavaBeans và do đó, JavaBeans cũng vậy. Và tất cả đều là POJO.