Sự bền bỉ trong Java
Trong những năm qua, tôi đã thu thập kinh nghiệm trong lĩnh vực trừu tượng hóa bền bỉ trong Java, sử dụng các khái niệm như EJB 2.0, Hibernate, JPA và những người trồng tại nhà. Họ dường như có một đường cong học tập dốc và rất phức tạp. Ngoài ra, là một fan hâm mộ lớn của SQL, tôi cũng nghĩ rằng nhiều mô hình trừu tượng cung cấp quá nhiều sự trừu tượng hóa đối với SQL, tạo ra các khái niệm như "tiêu chí", "vị ngữ", "hạn chế" là những khái niệm rất tốt, nhưng không phải là SQL.
Ý tưởng chung về sự trừu tượng hóa bền bỉ trong Java dường như được dựa trên mô hình quan hệ đối tượng, trong đó RDBMS bằng cách nào đó phù hợp với thế giới OO. Cuộc tranh luận ORM luôn luôn là một vấn đề tình cảm, vì dường như không tồn tại một giải pháp duy nhất phù hợp với tất cả mọi người - nếu một giải pháp như vậy thậm chí có thể tồn tại.
JOOQ
Sở thích cá nhân của tôi về cách tránh các vấn đề liên quan đến ORM là gắn bó với thế giới quan hệ. Bây giờ việc lựa chọn mô hình mô hình dữ liệu không phải là chủ đề thảo luận vì đó là sở thích cá nhân hoặc vấn đề mô hình dữ liệu nào phù hợp nhất với một vấn đề cụ thể. Cuộc thảo luận tôi muốn bắt đầu là xung quanh công cụ kiên trì của riêng tôi được gọi là jOOQ . Tôi đã thiết kế jOOQ để cung cấp hầu hết các lợi thế của các công cụ kiên trì hiện đại có:
- Một ngôn ngữ cụ thể miền dựa trên SQL
- Tạo mã nguồn ánh xạ lược đồ cơ sở dữ liệu cơ bản sang Java
- Hỗ trợ nhiều RDBMS
Thêm một số tính năng mà ít công cụ kiên trì hiện đại có (sửa tôi nếu tôi sai):
- Hỗ trợ SQL phức tạp - các hiệp hội, các lựa chọn lồng nhau, tự tham gia, bí danh, mệnh đề trường hợp, biểu thức số học
- Hỗ trợ SQL không chuẩn - thủ tục được lưu trữ, UDT's, ENUMS, hàm gốc, hàm phân tích
Vui lòng xem xét trang tài liệu để biết thêm chi tiết: http://www.jooq.org/learn.php . Bạn sẽ thấy rằng một cách tiếp cận tương tự được triển khai trong Linq cho C #, mặc dù Linq không được thiết kế riêng cho SQL.
Câu hỏi
Bây giờ, khi nói rằng tôi là một fan hâm mộ lớn của SQL, tôi tự hỏi liệu các nhà phát triển khác sẽ chia sẻ sự nhiệt tình của tôi đối với jOOQ (hay Linq). Đây có phải là cách tiếp cận trừu tượng bền bỉ? Những lợi thế / bất lợi bạn có thể thấy là gì? Làm thế nào tôi có thể cải thiện jOOQ, và những gì còn thiếu trong quan điểm của bạn? Tôi đã sai ở đâu, về mặt khái niệm hay thực tế?
Câu trả lời quan trọng nhưng mang tính xây dựng được đánh giá cao
Tôi hiểu rằng cuộc tranh luận là một cuộc tình cảm. Có rất nhiều công cụ tuyệt vời hiện có làm những điều tương tự. Những gì tôi quan tâm là phản hồi quan trọng nhưng mang tính xây dựng, dựa trên kinh nghiệm hoặc bài viết của riêng bạn mà bạn có thể đã đọc.