2010-03-02 31 views
44

Sau khi phát triển trong CodeIgniter trong một thời gian, tôi thấy khó có thể đưa ra quyết định khi tạo thư viện tùy chỉnh và khi nào cần tạo trình trợ giúp tùy chỉnh.CodeIgniter: Việc ra quyết định tạo thư viện & trợ giúp trong CodeIgniter

Tôi hiểu rằng cả hai phép có logic kinh doanh trong đó và được tái sử dụng trên khung (gọi từ bộ điều khiển khác nhau vv)

Nhưng tôi tin tưởng mạnh mẽ rằng thực tế là các nhà phát triển cốt lõi CI được tách thư viện từ những người giúp đỡ, phải có lý do đằng sau nó và tôi đoán, đây là lý do chờ tôi khám phá và được chứng ngộ.

Các nhà phát triển CI ở đó, xin thông báo.

tôi nghĩ tốt hơn nên bao gồm một ví dụ.

tôi có thể có một

class notification_lib { 
    function set_message() { /*...*/} 

    function get_message() {/*...*/} 

    function update_message() {/*...*/} 
} 

Ngoài ra, tôi cũng có thể bao gồm tất cả các chức năng vào một helper.

Trong một tập tin notification_helper.php, tôi sẽ bao gồm set_message(), get_message(), update_message() ..

đâu một trong hai cách, nó vẫn có thể được tái sử dụng. Vì vậy, điều này đã cho tôi suy nghĩ về điểm quyết định về khi nào chính xác chúng ta tạo ra một thư viện và một người trợ giúp đặc biệt trong CI.

Trong ứng dụng php bình thường (không có khung), lựa chọn là rõ ràng vì không có trình trợ giúp, bạn sẽ chỉ cần tạo thư viện để sử dụng lại mã. Nhưng ở đây, trong CI, tôi muốn hiểu các nhà phát triển cốt lõi tách biệt các thư viện và người trợ giúp

+4

Library = a lớp, helper = một tập tin với một số phương pháp trong đó. Nếu tôi có thể nhớ chính xác ... – Natrium

Trả lời

25

Có một câu hỏi tôi tự hỏi khi quyết định điều này tôi nghĩ cũng sẽ giúp bạn. Câu hỏi đặt ra là: Tôi có cung cấp tính năng cho khuôn khổ của mình hay tôi đang hợp nhất không?

Nếu bạn có một tính năng mà bạn đang thêm vào khung của mình, thì bạn sẽ muốn tạo thư viện cho điều đó. Ví dụ, xác thực biểu mẫu là một tính năng mà bạn đang thêm vào một khung công tác. Mặc dù bạn có thể thực hiện xác nhận biểu mẫu mà không có thư viện này, bạn đang tạo một hệ thống chuẩn để xác nhận hợp lệ, đây là một tính năng.

Tuy nhiên, đó cũng là trình trợ giúp biểu mẫu giúp bạn tạo HTML biểu mẫu. Sự khác biệt lớn từ thư viện xác nhận biểu mẫu là trình trợ giúp biểu mẫu không tạo ra một tính năng mới, nó chỉ là một tập hợp các hàm liên quan giúp bạn viết HTML biểu mẫu đúng cách.

Hy vọng rằng sự khác biệt này sẽ giúp bạn như nó có tôi.

+1

Phil, khi nói đến nó hai tư duy không phải là khác nhau. khi bạn hợp nhất các hàm, bạn không cần truyền thông tin giữa các hàm, nhưng có những lúc bạn muốn truyền thông tin giữa các hàm, nhưng không phải là một thư viện cho nó, và suy nghĩ được đề xuất của tôi xử lý trường hợp đó. Trong thư viện, bạn được đề nghị (/ bắt buộc) để sử dụng các chức năng của nó, những người trợ giúp chỉ ở đó và có thể được gọi bất cứ khi nào. – Seaux

0

Cá nhân tôi sử dụng thư viện cho những thứ lớn, một thư viện FTP mà tôi đã xây dựng nhanh hơn rất nhiều so với thư viện được CodeIgniters xuất. Đây là một lớp với rất nhiều phương thức chia sẻ dữ liệu với nhau.

Tôi sử dụng người trợ giúp cho các tác vụ nhỏ hơn không liên quan đến nhiều chức năng khác. Các chức năng nhỏ như chuỗi trang trí có thể là một ví dụ. Hoặc sao chép thư mục đệ quy đến một vị trí khác.

+3

tôi nghĩ rằng khái niệm chính ở đây là 'một lớp học với rất nhiều phương pháp chia sẻ dữ liệu với nhau' – user179432

+1

Tôi nghĩ rằng "trang trí" là một khái niệm quan trọng. Ví dụ: nếu tôi muốn thêm và thêm một thẻ div vào một chuỗi chắc chắn là một hàm trợ giúp. Chức năng không quan tâm đến dữ liệu khác hoặc lưu dữ liệu để thực hiện công việc. Ngoài ra nó có thể được chia sẻ và sử dụng ở bất cứ đâu. – Clutch

57

Vâng, lựa chọn đi xuống để đặt các chức năng hoặc lớp học. Sự lựa chọn gần như giống như một câu của lớp thể hiện một lớp tĩnh.

Nếu bạn chỉ có một nhóm chức năng đơn giản thì bạn chỉ cần tạo một nhóm chức năng. Nếu các nhóm chức năng này chia sẻ rất nhiều dữ liệu, thì bạn cần tạo một lớp có một cá thể để lưu trữ dữ liệu này giữa các cuộc gọi hàm (hàm lớp).

Bạn có nhiều thuộc tính công khai hoặc riêng tư để lưu trữ liên quan đến tin nhắn thông báo của mình không?

Nếu bạn sử dụng một lớp, bạn có thể đặt nhiều thư thông qua hệ thống sau đó get_messages() có thể trả về một mảng tin nhắn riêng. Điều đó sẽ làm cho nó hoàn hảo để trở thành một thư viện.

+0

vâng, điều này có ý nghĩa hơn ... – user179432

+1

bạn cần phải hối lộ. : p +1 –

+3

Tôi đã bị lừa! Oh sốc, kinh dị, không đứng đắn! Sẽ không ai nghĩ đến những đứa trẻ! : '( –

7

Đầu tiên của tất cả, bạn nên chắc chắn rằng bạn hiểu sự khác biệt giữa CI libaray và lớp trợ giúp. Lớp trợ giúp là bất kỳ điều gì mà giúp mọi thứ được tạo sẵn như array, string, uri, v.v ...; chúng ở đó và PHP đã cung cấp các hàm cho chúng nhưng bạn vẫn tạo ra một trình trợ giúp để thêm nhiều chức năng hơn cho chúng.Mặt khác, libaray có thể là thứ gì đó giống như thứ gì đó bạn đang tạo ra lần đầu tiên, bất kỳ giải pháp nào có thể không nhất thiết phải có ở đó.

Một khi bạn hiểu rõ sự khác biệt này, việc quyết định không phải là khó khăn.

Hy vọng điều đó sẽ hữu ích.

Cảm ơn

3

Trình trợ giúp chứa một nhóm chức năng để giúp bạn thực hiện một tác vụ cụ thể.

Available helpers in CI

Thư viện thường chứa chức năng cụ thể không CI. Giống như một thư viện hình ảnh. Cái gì đó là di động giữa các ứng dụng.

Available libraries in CI

Nguồn link

2

Nếu ai đó hỏi tôi những gì theo cách bạn làm theo khi thời gian đến để tạo Helpers hoặc Libraries.

Tôi nghĩ rằng những khác biệt này:

  • Class: Tóm lại, một lớp là một kế hoạch chi tiết cho một đối tượng. Và một đối tượng bao gồm trạng thái và trách nhiệm liên quan đến khái niệm về một cái gì đó trong ứng dụng của bạn và thường cung cấp một giao diện lập trình để tương tác với chúng. Điều này nuôi dưỡng mã tái sử dụng và cải thiện khả năng bảo trì.
  • Chức năng: Hàm là một đoạn mã lấy thêm một đầu vào ở dạng tham số và thực hiện một số xử lý và trả về một giá trị. Bạn đã thấy nhiều hàm như fopen() và fread() vv Chúng là các hàm dựng sẵn nhưng PHP cung cấp cho bạn tùy chọn để tạo ra các hàm của riêng bạn.

Vì vậy, đi cho Lớp thư viện có nghĩa là nếu có một điểm phù hợp

  1. biến toàn cầu cần phải sử dụng trong hai hay nhiều chức năng hay thậm chí là một, Tôi ghét sử dụng từ khóa toàn cầu
  2. khởi tạo mặc định như mỗi lần gọi hoặc tải
  3. một số tác vụ riêng tư đối với thực thể không được mở công khai, hãy nghĩ về các chức năng không bao giờ có công cụ sửa đổi công khai tại sao?
  4. chức năng để phụ thuộc chức năng tức là các tác vụ được tách ra nhưng hai hoặc nhiều tác vụ cần nó. Hãy nghĩ về kiểm tra validate_email chỉ để gửi kịch bản email tới, cc, bcc, v.v. tất cả những nhu cầu này đều validate_email.
  5. Và cuối cùng không phải là tất cả các nhiệm vụ liên quan tức là các chức năng phải được đặt trong một đối tượng hoặc tệp đơn lẻ, dễ tham khảo và nhớ lại hơn.

Đối Helpers: bất kỳ điểm nào mà không phù hợp với các thư viện

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