2008-12-15 6 views
17

Giả sử rằng viết các tập tin ánh xạ nhibernate không phải là một vấn đề lớn .... hoặc gây ô nhiễm đối tượng miền của bạn với các thuộc tính không phải là một vấn đề lớn ...Whats những thuận và chống của việc sử dụng Castle Active Record vs NHibernate thẳng?

ưu và nhược điểm là gì?

có bất kỳ vấn đề kỹ thuật cơ bản nào không? Những gì có xu hướng ảnh hưởng đến sự lựa chọn của người dân?

không hoàn toàn chắc chắn rằng tất cả sự cân bằng là gì.

Trả lời

21

Chuyên gia lớn nhất của AR là nó cung cấp cho bạn một kho lưu trữ được tạo sẵn và quản lý phiên làm việc cho bạn. Hoặc là ActiveRecordBase<T>ActiveRecordMediator<T> là một món quà mà bạn có thể đã kết thúc việc lắp ráp chính mình dưới NHibernate. Tránh ánh xạ XML là một điểm cộng khác. Các thuộc tính ánh xạ AR rất đơn giản để sử dụng, nhưng vẫn đủ linh hoạt để lập bản đồ ngay cả các cơ sở dữ liệu 'cũ' khá.

Con lớn nhất của AR là nó tích cực khuyến khích bạn suy nghĩ không chính xác về NHibernate. Đó là, bởi vì quản lý phiên mặc định là phiên cho mỗi cuộc gọi, bạn sẽ quen với ý tưởng rằng các đối tượng vẫn tồn tại bị ngắt kết nối và phải là Save() d khi các thay đổi xảy ra. Đây không phải là cách NHibernate có nghĩa vụ phải làm việc - thông thường bạn sẽ có phiên làm việc cho mỗi đơn vị hoặc yêu cầu hoặc chủ đề, và các đối tượng sẽ vẫn được kết nối cho vòng đời của phiên, vì vậy các thay đổi sẽ được tự động tiếp tục tồn tại. Nếu bạn bắt đầu sử dụng AR và sau đó tìm ra bạn cần phải chuyển sang phiên mỗi yêu cầu để thực hiện công việc tải chậm - điều này không được giải thích rõ trong tài liệu - bạn sẽ nhận được một sự ngạc nhiên khó chịu khi một đối tượng bạn không mong đợi để được lưu khi phiên xóa.

Hãy nhớ rằng nhóm Castle đã viết AR làm sản phẩm bổ sung cho Castle Monorail, một khung công tác giống như Rails cho .NET. Nó được thiết kế với loại sử dụng này trong tâm trí. Nó không thích nghi tốt với một thiết kế tách rời, nhiều lớp hơn.

Sử dụng nó cho mục đích, nhưng đừng nghĩ về nó như một phím tắt cho NHibernate. Nếu bạn muốn sử dụng NH nhưng tránh các tệp ánh xạ, hãy sử dụng các thuộc tính NHibernate hoặc tốt hơn, Fluent NHibernate.

0

Khi tôi bắt đầu sử dụng NHibernate, tôi đã không tìm hiểu về Castle ActiveRecord cho đến khi tôi đã viết các tệp Bản đồ và tạo các lớp học của mình. Tại thời điểm đó, tôi không thể nhận ra rõ ràng những gì Castle Activerecord sẽ cho tôi, vì vậy tôi đã không sử dụng nó.

Lần thứ hai tôi sử dụng NHibernate, tôi chỉ đơn giản sử dụng myGeneration để tạo các tệp ánh xạ và các lớp chỉ bằng cách nhìn vào cơ sở dữ liệu của tôi. Điều đó tiết kiệm rất nhiều thời gian của chính nó, và cho phép tôi (một lần nữa) không phải lo lắng về Castle Active Record. Trong thực tế, hầu hết thời gian của bạn sẽ được chi tiêu cho việc thực hiện các truy vấn tùy chỉnh, và Castle Active Record sẽ không nhất thiết phải giúp với điều đó - nếu bạn sử dụng myGeneration với NHibernate, bạn sẽ bỏ qua hầu hết các công việc bạn cần làm.

Chỉnh sửa: Tôi không muốn có vẻ như một người cổ vũ cho cả myGeneration hoặc NHibernate. Tôi chỉ sử dụng công cụ cho phép tôi hoàn thành công việc một cách nhanh chóng và dễ dàng. Tôi mất ít thời gian hơn để viết mã truy cập dữ liệu, càng tốt. Nó không có nghĩa là tôi không thể làm điều đó - nhưng có rất ít ý nghĩa trong việc tái phát minh ra bánh xe mỗi khi bạn viết một ứng dụng mới. Viết các truy vấn SQL và các thủ tục lưu sẵn khi cần thiết và không có nơi nào khác. Nếu bạn đang thực hiện các hoạt động CRUD, ORM là cách để đi.

Chỉnh sửa # 2: Castle Active Record có thể mang lại nhiều hơn bảng so với tôi nhận ra - Tôi không biết nhiều khác than what's on their website, nhưng nếu nó mang lại nhiều hơn cho bảng, sau đó nó sẽ giúp tiềm năng chấp nhận để có thể để dễ dàng thấy điều đó trên trang web của họ.

15

Tôi thấy ActiveRecord là một bộ công cụ tốt và rất phù hợp với các dự án nhỏ/vừa mà tôi đã sử dụng. Giống như Rails, nó đưa ra nhiều quyết định quan trọng đối với bạn, điều này có tác dụng giữ cho bạn tập trung vào thịt của vấn đề.

Theo tôi ủng hộ và phản đối là:

Ưu

  • Cho phép bạn tập trung vào vấn đề trong tay, vì nhiều quyết định được thực hiện cho bạn.
  • Bao gồm các lớp cơ sở hạ tầng trưởng thành, rất hữu dụng (Kho lưu trữ, Xác thực, v.v.)
  • Viết thuộc tính AR nhanh hơn viết XML hoặc NHibernate.Mapping.Attributes IMHO.
  • Tài liệu tốt và hỗ trợ cộng đồng
  • Khá dễ sử dụng các tính năng NHibernate khác với nó.
  • Khởi động an toàn. Bạn có một mệnh đề thoát. Bạn có thể từ từ trở lại vào một giải pháp NHibernate riêng biệt nếu bạn nhấn tường với AR.
  • Tuyệt vời cho phát triển miền đầu tiên (tạo db).
  • Bạn cũng có thể muốn tìm kiếm những lợi ích và hạn chế của các ActiveRecord pattern

Nhược điểm

  • Bạn không thể giả vờ NHibernate là không có - bạn vẫn cần phải tìm hiểu nó.
  • Có thể không hiệu quả nếu bạn đã có cơ sở dữ liệu cũ để làm việc.
  • Không minh bạch.
  • Ánh xạ trong xây dựng là toàn diện, nhưng đối với một số dự án bạn có thể cần phải hoàn nguyên về ánh xạ NHibernate ở những nơi. Tôi đã không có vấn đề này, nhưng chỉ là một ý nghĩ.

Nói chung, tôi thực sự thích ActiveRecord và nó luôn luôn là một tiết kiệm thời gian, chủ yếu là bởi vì tôi dường như hạnh phúc chấp nhận các quyết định và các công cụ nướng vào thư viện, và sau đó dành nhiều thời gian tập trung vào các vấn đề trong tay .

Tôi sẽ thử dùng một vài dự án và xem suy nghĩ của bạn.