2012-04-08 32 views
9

Tôi đã đọc tuyệt vời Layers Service loạt Alejandro Gervasio ở đây: http://www.devshed.com/cp/bio/Alejandro-Gervasio/ và tôi nhận thấy anh cũng là một trong những phát triển những người ủng hộ PHP Bộ sưu tập, như trong http://www.devshed.com/c/a/PHP/PHP-Service-Layers-Handling-Entity-Collections/1/Mục đích của việc tạo các lớp sưu tập trong PHP là gì?

Tại sao vậy? Tại sao tạo một lớp mô phỏng một mảng kết hợp đơn giản bằng cách sử dụng các mảng trong chính nó?

+0

Tôi đã đọc một cuốn sách về kỹ thuật php oop nâng cao một lần và nó đã nói về độ dài này. Rõ ràng họ làm điều này bởi vì nó cho phép bạn sử dụng một đối tượng giống như một mảng .. – Kristian

+3

Bạn có thể viết tắt "php oop" là "poop", fyi. –

Trả lời

10

tôi didnt đọc bài viết nhưng tôi có thể cho bạn biết lý do tại sao tôi làm điều đó nói chung:

  1. Searching/Sorting/Truy cập: Tôi có thể tìm kiếm trừu tượng, lọc, và truy cập vào các mục tôi muốn trong bộ sưu tập mà không chuyển sang db với các phương thức đặc biệt và không phụ thuộc vào một khóa mảng duy nhất.
  2. Dễ dàng hơn để cắm vào giao diện quản lý thực thể nếu bạn có thể chuyển vào và Entity hoặc giao diện EntityCollection - một lần nữa ở đây bạn có thể có chức năng được đóng gói trong bộ sưu tập để thực hiện các thao tác trên nhiều thực thể. Không phải là bạn không thể làm điều này trong một vòng lặp, nhưng nó cho phép bạn ẩn nó đi và làm cho những điều cụ thể xảy ra cho các lớp thu khác nhau).
  3. Tuần tự hóa bộ sưu tập - tuần tự hóa tùy chỉnh (nghĩ chọn các thuộc tính cụ thể) để tuần tự hóa thành một định dạng chuỗi cụ thể.
  4. Bạn vẫn có thể hỗ trợ giao diện mảng để truy cập cơ bản và lặp lại dễ dàng.
+0

Về điểm 1 - sẽ không phải là một truy vấn động được sáng tác kỹ lưỡng, hãy quan tâm đến việc sắp xếp và tìm kiếm? Ngoài ra, tôi thường viết các hàm trợ giúp trong một lớp tiện ích để phân loại 2D theo thuộc tính hoặc phần tử, sau đó có thể được gọi từ bất kỳ đâu. Tôi có nghĩa là tôi thấy làm thế nào bạn có thể tóm tắt điều này vào lớp bộ sưu tập, nó chỉ có vẻ như trên không cho tôi từ quan điểm của tôi. Bạn có thể đặt tên cho các ví dụ cho điểm 2 và 3 không? – Swader

1

Nếu tôi có thể hoàn thành câu trả lời với những gì tôi đã quan sát thấy trong học thuyết 2:

Với Doctrine, bạn sử dụng giao diện Collection và bạn không quan tâm như thế nào nó hoạt động. Giao diện cung cấp các phương pháp lọc, sắp xếp, ...

Nhưng Doctrine cung cấp triển khai Collection có tên PersistentCollection. Bạn thậm chí không biết bạn đang sử dụng nó vì bạn sử dụng giao diện, nhưng với bộ sưu tập đặc biệt này, Doctrine sẽ có thể thực hiện các truy vấn cơ sở dữ liệu một cách thông minh và minh bạch khi bạn lọc/tìm kiếm/sắp xếp bộ sưu tập. Nó cũng sẽ cho phép Doctrine tải nội dung của bộ sưu tập (danh sách các đối tượng) chỉ khi chúng được truy cập (tải lười), có thể giúp đạt được trong các buổi biểu diễn.

Điều này sẽ không thể thực hiện với một mảng PHP, bạn sẽ phải tải nó hoàn toàn từ cơ sở dữ liệu và sau đó thực hiện các thao tác của bạn.

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