2009-09-10 31 views
10

Tôi đang làm việc với CodeIgniter và đã bắt đầu với Bản ghi Hoạt động lần đầu tiên. Lúc đầu, tôi loại bỏ nó như là một cái gì đó cho những người không thực sự biết làm thế nào để viết SQL. Tôi nhận ra rằng phân tích của tôi đã bị thiếu sót và Active Records khá nổi bật, đặc biệt là trong Rails.Mục đích của Bản ghi hoạt động là gì?

Nhưng mục đích hoạt động của Hồ sơ hoạt động là gì? Nó có trừu tượng ra khỏi các cá thể RDBMS khác nhau không. Nếu vậy tôi nghĩ rằng đó không phải là những gì SQL có nghĩa là để làm. Hơn nữa thực hành tốt nhất là gì, tôi có nên sử dụng chúng không?

Cảm ơn trước

Trả lời

5

Các "Active Record Pattern" đang trở thành một phần cốt lõi của hầu hết các khuôn khổ chương trình. Nó làm cho các nhiệm vụ CRUD (Tạo, Cập nhật, Đọc, Xóa) đơn giản hơn để đạt được. Ví dụ thay vì phải viết nhiều SQL để Chèn, Cập nhật và Xóa nhiều đối tượng dữ liệu phổ biến và đơn giản, nó cho phép bạn chỉ cần gán các giá trị cho đối tượng dữ liệu và chạy một lệnh, ví dụ: $ object-> save(), SQL được biên dịch và thực hiện cho bạn.

Hầu hết các khung công tác cũng thực hiện các mối quan hệ dữ liệu trong các mô hình Active Record tương ứng của chúng, giúp đơn giản hóa việc truy cập dữ liệu liên quan đến đối tượng của bạn. Ví dụ, trong CodeIgniter, nếu bạn chỉ định rằng một Category "có nhiều" Sản phẩm sau đó sau khi tải đối tượng Category từ cơ sở dữ liệu, bạn có thể liệt kê nó là sản phẩm con với một dòng mã đơn giản.

foreach ($category->products as $product) { 
    echo $product->name; 
} 

Một lợi ích khác của Active Record là, như bạn nói, mà nó làm cho mã của bạn dễ dàng di động đến các nền tảng cơ sở dữ liệu khác nhau (miễn là khuôn khổ mà bạn đang sử dụng có một trình điều khiển cho cơ sở dữ liệu của bạn được lựa chọn) và mặc dù điều này dường như không có vẻ quan trọng ngay bây giờ, nó có giá trị lớn hơn vào một ngày sau đó nếu ứng dụng của bạn trở nên phổ biến!

Hy vọng điều này sẽ hữu ích. Wikipedia mô tả hoạt động tốt Record (http://en.wikipedia.org/wiki/Active_record_pattern) và các tài liệu CodeIgniter sẽ là tốt. Cá nhân, tôi sử dụng KohanaPHP (http://www.kohanaphp.com) mà là một ngã ba PHP5 duy nhất của CodeIgniter và tôi thấy rằng đó là mô hình ORM rất hữu ích!

8

Active Record là một mẫu thiết kế cho việc truy cập dữ liệu ...

Tại thời điểm này có hai mẫu thiết kế chính tôi dường như đi qua liên quan đến truy cập dữ liệu: ActiveRecord và Pattern Repository

Active Record

đối tượng của bạn chứa các phương pháp để kiên trì trạng thái của họ đến một DB (hoặc cơ chế bền bỉ khác) như vậy:

Bạn có thể có đối tượng Khách hàng.

Đối tượng khách hàng sẽ có một loạt các phương thức như Customer.Save() ;, Customer.Get (int id); và những người khác.

Những phương pháp này không thực sự liên quan đến khách hàng trong thế giới thực. Họ thực sự là về cơ sở hạ tầng của ứng dụng của bạn.

Repository Pattern

Trong mô hình kho, đối tượng khách hàng của bạn sẽ là một POCO, hoặc đối tượng câm. Nó chỉ có phương pháp và tài sản mà nó thực sự cần để đại diện cho một khách hàng (những thứ như tên, địa chỉ email, Danh sách đơn đặt hàng, vv)

Khi bạn muốn kéo dài các khách hàng - bạn chỉ cần vượt qua nó để kho của bạn

Repository.Save (MyCustomer).

Mẫu bản ghi hoạt động nhanh chóng và dễ dàng để làm việc. Thật không may, nó làm lộn xộn lên mô hình miền của bạn với những phương pháp này mà không thực sự có bất cứ điều gì để làm với một khách hàng. Điều này khiến việc duy trì mô hình miền của bạn khó hơn một chút theo thời gian.

Đối với nhiều trường hợp, rất thích hợp để sử dụng mẫu Bản ghi hoạt động. Ví dụ - Nếu tôi đang viết một ứng dụng khá đơn giản, có lẽ sẽ không thay đổi nhiều, tôi có lẽ sẽ kích hoạt SubSonic và tạo ra một bản ghi DAL hoạt động của tôi. Tôi muốn mã hóa mã kinh doanh của mình trong vòng 20 phút và tất cả các công cụ DB đã được xử lý.

Nếu, mặt khác, tôi đang mô hình hóa một miền đặc biệt phức tạp, với tính nhạy cảm cao để thay đổi, tôi thà giữ mô hình tên miền của tôi sạch sẽ, và thực hiện một mô hình kho với nHibernate hoặc tương tự ...

Đã lâu rồi tôi không thể truy cập dữ liệu của mình bằng cách sử dụng ADO.Net, và tôi không thực sự khuyên bạn nên nó có rất nhiều công cụ truy cập dữ liệu tuyệt vời.

+0

+1. Giải thích rất tốt –

0

Bản ghi đang hoạt động là ORM - Bạn đã xem kỹ thuật Ánh xạ đối tượng-quan hệ chưa? Tôi nghĩ nếu bạn hiểu ORM, bạn sẽ bắt đầu thấy những lợi ích.

+0

Đã có các ORM có "Active Record" trong tên, nhưng Active Record chính xác hơn là một mẫu thiết kế ứng dụng doanh nghiệp. Kiểm tra cuốn sách Martin Fowler trong câu trả lời của tôi, đó là một cuốn sách tuyệt vời để xóa những thứ này. – Ash

+0

Hi Ash, cảm ơn vì điều đó - sẽ đọc ... – JonB

2

Tôi có thể đưa ra quan điểm của riêng mình về mẫu này nhưng phạm vi phủ sóng tốt nhất của Hồ sơ hiện hoạt (và nhiều loại khác) là Patterns of Enterprise Application Architecture bởi Martin Fowler.

Từ chương 10:

Active Record

Một đối tượng bọc lấy một hàng trong một bảng cơ sở dữ liệu hoặc xem, gói gọn truy cập cơ sở dữ liệu, và cho biết thêm miền logic trên dữ liệu đó.

Một đối tượng mang cả dữ liệu và hành vi . Phần lớn dữ liệu này là liên tục và cần được lưu trữ trong cơ sở dữ liệu . Active Record sử dụng phương pháp hiển thị rõ ràng nhất , đặt truy cập dữ liệu logic trong đối tượng miền. Bằng cách này, tất cả mọi người đều biết cách đọc và viết dữ liệu của họ đến và từ cơ sở dữ liệu.

...

Khi nào thì sử dụng nó

Active Record là một lựa chọn tốt cho logic miền đó không phải là quá phức tạp, chẳng hạn như tạo, đọc, cập nhật và xóa dần. Nguồn gốc và xác thực dựa trên một bản ghi hoạt động tốt trong cấu trúc này.

...

Bản ghi hoạt động có lợi thế chính là đơn giản. Thật dễ dàng để tạo Bản ghi đang hoạt động và chúng dễ dàng hiểu được . Vấn đề chính của họ là chúng hoạt động tốt chỉ khi đối tượng Bản ghi Hoạt động tương ứng trực tiếp với các bảng cơ sở dữ liệu: một lược đồ đẳng cấu .

Nếu logic kinh doanh của bạn rất phức tạp, bạn sẽ sớm muốn sử dụng trực tiếp mối quan hệ của đối tượng của bạn, bộ sưu tập, thừa kế, và vân vân. Đây không phải là bản đồ dễ dàng vào Bản ghi đang hoạt động và thêm chúng từng phần rất lộn xộn. Đó là những gì sẽ dẫn bạn sử dụng dữ liệu Mapper thay

1

Nếu có bất cứ điều gì, nó giúp việc viết truy vấn dễ dàng hơn. Tôi thấy cú pháp MySQL bình thường là dễ bị lỗi cú pháp (không có lỗi nhưng của riêng tôi) và với cú pháp ghi hoạt động CI hiếm khi xảy ra với tôi.

Bản ghi hoạt động là một trong những tính năng thú vị nhất trong CI IMHO

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