2012-09-09 27 views
5

Tôi cố gắng để viết lại một loạt các DAO đây là cài đặt:Sử dụng DAO với các đối tượng hỗn

  • chỉ đơn giản JDBC (không JPA, ORM nào)
  • không có giao diện sử dụng
  • rất nhiều kiểm tra trước khi chèn một đối tượng
  • đối tượng kinh doanh được liên kết mạnh mẽ

câu hỏi chính của tôi là: làm thế nào để persi st/lấy một đối tượng kinh doanh bao gồm nhiều đối tượng khác? ví dụ: khách hàng của tôi có biết AddressDAO và truy lục địa chỉ csutomers từ đó không?

+0

hãy xem [jcabi-jdbc] (http://www.jcabi.com/jcabi-jdbc), đây là một trình bao bọc nhẹ xung quanh JDBC (Tôi là nhà phát triển) – yegor256

Trả lời

1

chỉ đơn giản JDBC (không JPA, ORM nào) đối tượng kinh doanh được liên kết mạnh mẽ

Không chắc lý do tại sao bạn không muốn sử dụng JPA trong khi bạn muốn đối tượng doanh nghiệp của bạn được liên kết, nhưng ít nhất bạn nên sử dụng mẫu Spring JDBC sẽ giúp bạn khỏi một số mã soạn sẵn.

Về những hạn chế khác, tôi sẽ làm điều đó như sau:

  1. tôi vẫn sẽ sử dụng giao diện để xác định DAO phương pháp và thực hiện chúng trong một mẫu Xuân JDBC hậu thuẫn DAOImpl. Sử dụng DAO ở khắp mọi nơi và tiêm DAOImpl.
  2. DAO của tôi sẽ chỉ đơn giản là một đối một ánh xạ tới các bảng bên dưới và mỗi DAO sẽ không biết về sự tồn tại của các DAO khác.
  3. Lớp Trình quản lý của tôi sẽ có tất cả logic nghiệp vụ chạy kiểm tra xác thực và chuẩn bị bộ đối tượng cần được duy trì, gọi DAO thích hợp và phương thức thích hợp (CREATE/UPDATE/DELETE) để duy trì các đối tượng.
  4. Một lần nữa, lớp Trình quản lý sẽ thực hiện theo triển khai dựa trên giao diện và lớp xem sẽ có các loại trình quản lý được tiêm với ManagerImpls.

Hai xu của tôi!

+0

Cảm ơn! Tôi nghĩ về JPA. Cho đến nay lập luận phản đối là ứng dụng này không được thiết kế một cách kiên định và tôi không chắc chắn cách thức hoạt động của JPA sẽ hoạt động. (Điều này thậm chí không chạy trong một máy chủ ứng dụng!). Tuy nhiên, nếu tôi giúp bạn đúng điểm 2-4 về cơ bản có nghĩa là tôi viết mã thực thể của riêng mình, đúng không? – er4z0r

+0

Đúng vậy, lớp người quản lý của bạn sẽ có kiến ​​thức về các liên kết giữa các đối tượng miền khác nhau (ví dụ: Khách hàng, Địa chỉ), v.v. Nếu bạn sử dụng đặc tả JPA để xác định thực thể của bạn và các hiệp hội của họ và sử dụng nhà cung cấp JPA (như Hibernate) đã quan tâm đến sự kiên trì của hệ thống phân cấp đối tượng và bạn có thể tập trung vào bản dịch đối tượng miền chuyển dữ liệu - đối tượng. – Vikdor

0

Bạn có thể xem xét sử dụng JOOQ. Nó không phải là JPA, nhưng nó có thể dễ dàng được sử dụng như một giải pháp thay thế. Nó đủ nhẹ. Nó cũng cung cấp một công cụ thiết kế ngược, nơi nó xây dựng các thực thể Cơ sở dữ liệu của bạn như các đối tượng DAO.

Tôi đã nhúng JOOQ vào một tình huống có liên quan, nơi ứng dụng được thiết kế khá công phu. Tôi đã không sử dụng chức năng DAO của nó, thay vì sử dụng nó như là một lớp cao hơn để tránh rối tung với lớp JDBC.

Chúc mừng!

0

Đối tượng kết hợp là một lớp phía trên DAO. Nếu bạn muốn loại bỏ TẤT CẢ các khớp nối, các đối tượng miền tồn tại bởi DAO phải phẳng mà không có mối quan hệ. Xem các mẫu lõi J2EE CompositeEntity.

Ngoài ra, tốt hơn là không nên giới thiệu khớp nối giữa các DAO bằng cách đặt công cụ tìm cho người khác. Ví dụ:

AddressDAO.findForCustomerId (id);

kém hơn việc sử dụng DAO thứ ba để quản lý mối quan hệ. I.E:

CustomerAddressRelDAO.findAddressForCustomer (id);

Nếu bạn sử dụng mối quan hệ DAO, cả địa chỉ lẫn khách hàng đều không phụ thuộc vào (hoặc nhận thức) lẫn nhau.

Các vấn đề liên quan