2009-01-17 16 views
5

Đối với tôi câu trả lời là hiện tại: Không, tôi sẽ sử dụng iBatis, vì NHibernate là một nỗi đau, khi mô hình cơ sở dữ liệu và mô hình đối tượng không đồng bộ. Nếu tôi không có toàn quyền kiểm soát cơ sở dữ liệu thì tôi sẽ có rất nhiều công việc.Bạn có sử dụng NHibernate cho một dự án với một cơ sở dữ liệu cũ, một phần ngoài tầm kiểm soát của bạn không?

Tại sao tôi hỏi?

Vâng, trước hết: Tôi chưa bao giờ sử dụng NHibernate. Tôi chỉ biết nó từ bề mặt. Tôi đã đọc về những ưu điểm của iBatis cho cơ sở dữ liệu kế thừa.

Thứ hai: Gần đây tôi đã có cuộc thảo luận với một người đã làm việc với Hibernate (jep, không có 'N' trước Hibernate). Ông nói với tôi rằng các khung công tác ORM hiện nay khá tiên tiến và ủng hộ Hibernate. Vì tôi không quan tâm đến NHibernate, tôi đã không theo dõi những phát triển gần đây.

Có lẽ tôi đã dành thời gian để suy nghĩ lại câu trả lời của mình, hay không?

+0

Điều này sẽ là câu hỏi tiếp theo của tôi trên stackoverflow - cảm ơn bạn đã hỏi! – SRO

Trả lời

5

iBatis chắc chắn là dễ dàng để ánh xạ đối tượng đến các hệ thống cơ sở dữ liệu cũ.

Gần đây hơn NHibernate 1.2 và 2.0 có bộ tính năng có thể khiến bạn suy nghĩ lại iBatis.

NHibernate hoạt động với các phím tổng hợp, có thể xảy ra thường xuyên trong các cơ sở dữ liệu cũ hơn, chúng không phải lúc nào cũng dễ chịu khi làm việc nhưng hỗ trợ vẫn có sẵn cho điều này.

NHibernate có thể sử dụng các thủ tục được lưu trữ cho các hoạt động CRUD trên các thực thể cũng như các khung nhìn cơ sở dữ liệu.

Bộ sưu tập có thể là các thủ tục được lưu trữ tùy chỉnh hoặc truy vấn SQL. Bộ sưu tập có thể sử dụng thuộc tính ref-property khi mối quan hệ Foreign Key không ánh xạ trực tiếp đến khóa chính ở phía bên kia.

Một số tính năng này có thể lấy đi từ hiệu suất/công suất của nhibernate, nghĩa là tải Lazy với thuộc tính-ref không hoạt động (ở tất cả?), Nhưng hầu hết các trường hợp đều có lý do cho việc này.

điểm khác: (mà không thực sự liên quan đến cơ sở dữ liệu di sản của bạn, nhưng vẫn có thể giúp quyết định chọn công nghệ)

cộng đồng Các Nhibernate xuất hiện phong phú hơn nhiều so với iBatis. Tôi đang ở cả hai danh sách và khối lượng hỗ trợ cho NHibernate là khá lớn so với nhóm iBatis. Vì vậy, hỗ trợ nên được dễ dàng hơn.

Ngoài ra còn có một số lượng lớn các công cụ đóng góp/bên thứ 3 cho NHibernate. Những điều như NHibernate Profiler, Nhibernate Query Analyzer, NHibernate Contrib, Fluent NHibernate để đặt tên một vài.

Có lẽ bạn có thể mở rộng những lợi thế mà bạn tin rằng iBatis hiện có. NHibernate chắc chắn đã khá tích cực gần đây và đã đạt được nhiều tính năng mới, rất nhiều trong số đó làm hỗ trợ trong di sản/khó sửa đổi lược đồ.

Và để trả lời câu hỏi, có, chúng tôi sử dụng NHibernate với các cơ sở dữ liệu cũ có mối quan hệ khủng khiếp, các phím tổng hợp, các mối quan hệ bị hỏng. Chúng tôi vẫn còn có một lượng nhỏ mã dựa trên iBatis. Chúng tôi không còn viết bất kỳ mã iBatis nào nữa.

+0

Caching * có thể * hoạt động nếu bạn sử dụng thông báo cơ sở dữ liệu. –

0

Tôi đã sử dụng nHibernate trong một ứng dụng hiện có. Tôi sử dụng nó cho tất cả sự phát triển mới, tôi không có ý định chuyển các công cụ hiện có lên hoặc không có lý do thuyết phục nhưng đối với những thứ mới trong dự án, nó hoạt động rất tốt.

Nếu bạn định chuyển mã, bạn có thể thay đổi cơ sở dữ liệu để phù hợp hơn với mô hình miền của bạn, không ảnh hưởng nhiều (tùy thuộc vào cơ sở dữ liệu của bạn bị rò rỉ như thế nào). Thay đổi mô hình miền sẽ tác động đến ứng dụng.

+0

Nó không phải là một cổng mã. Nhiều phần của ứng dụng cũ vẫn còn và chức năng nên được thêm vào. Cấu trúc cơ sở dữ liệu là một phần ngoài tầm kiểm soát của tôi (vì các phần cũ của ứng dụng và do phụ thuộc từ các phần tử hiện có khác). –

1

Có, hãy xem xét NHibernate. Đó là tiêu chuẩn vàng vì một lý do. Tôi đã nghe nói rằng iBATIS hỗ trợ khả năng lập bản đồ điên rồ, nhưng với IUserType của NHibernate bạn có thể ánh xạ bất kỳ thứ gì, thậm chí là các cột kỳ lạ.

@Ahmad, toàn bộ điểm ORM là để ngăn chặn sự liên kết chặt chẽ giữa các đối tượng và lược đồ của bạn. Nếu bạn có vấn đề này bạn đang làm sai.

Ngoài ra, với NHibernate có rất nhiều tùy chọn cho truy vấn tùy chỉnh, thuộc tính công thức và quy trình được lưu trữ. HQL là cực kỳ mạnh mẽ và tiêu chí là linh hoạt.

Tôi nghĩ rằng bạn sẽ làm cho khách hàng của bạn một sự bất mãn nếu bạn không ít nhất tăng đột biến NHibernate.

+0

Làm thế nào về sự tham gia thực sự điên rồ giữa các bảng? Bởi vì nó là một phần cơ sở dữ liệu kế thừa, cũng sẽ cần có một số câu lệnh SQL được kiểm soát. –

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