2013-03-16 24 views
11

Tôi đã khám phá các phương pháp khác nhau để cấu trúc các ứng dụng Coldfusion của mình và tôi đang tìm một số ý kiến ​​về cách tốt nhất để cung cấp các ứng dụng UDF rộng.Mở rộng ColdFusion với các ứng dụng UDF rộng

Đối với mỗi ứng dụng của tôi, tôi thường sử dụng một loạt các chức năng bổ sung không thực sự thuộc về bất kỳ đối tượng cụ thể nào. Hầu hết các thao tác dữ liệu. Tôi muốn các chức năng này có sẵn trong toàn bộ ứng dụng của tôi, cả hai đều được sử dụng trong các mẫu CFM và trong các CFC được ứng dụng ngay lập tức.

Con đường tôi nhìn thấy nó có những phương pháp khác nhau để đạt được điều này, nhưng tất cả họ đều có những hạn chế riêng của họ:

  1. Khởi tạo một cơ sở Utils CFC trong phạm vi ứng dụng. Đây là phương pháp tôi đã sử dụng thường xuyên nhất. Tất cả các chức năng đều có sẵn ứng dụng rộng, nhưng nếu tôi khởi tạo cùng một CFC từ nhiều ứng dụng thì mỗi người sẽ có phạm vi ứng dụng riêng của họ - nghĩa là mỗi người phải khởi tạo cơ sở riêng của họ Utils CFC. Không có gì sai với điều này nhưng nó cảm thấy như tôi không đóng gói CFC đủ tốt. Tôi không muốn tham khảo phạm vi Ứng dụng từ bên trong CFC.

  2. Tạo cơ sở Utils CFC và làm cho mọi CFC khác mở rộng điều này. Điều này làm việc tốt, và nó có nghĩa là CFC có thể tham chiếu các hàm Utils trực tiếp từ phạm vi NÀY của CFC - Tuy nhiên nó có nghĩa là các hàm Utils được lưu giữ trong bộ nhớ cho mọi CFC. Nó cũng không đúng về mặt khái niệm vì các CFC khác của tôi không có mối quan hệ với Utils CFC.

  3. Tiêm cơ sở của tôi Utils CFC vào các CFC khác của tôi. Một phương pháp khác mà tôi đã chơi với là instantiating cơ sở của tôi Utils CFC trong phạm vi ứng dụng, nhưng sau đó đi qua đó như là một đối tượng để một đối số trong CFCs khác của tôi. Điều này làm việc cho tôi về mặt khái niệm và để đóng gói. Trong cùng một cách mà tôi sẽ thiết lập các nguồn dữ liệu của tôi trong phương thức init của tôi, tôi có thể làm tương tự với các UDF của tôi. Điều này có cùng một vấn đề mà các UDF được bao gồm trong mỗi CFC. Khi tôi đổ tất cả các CFC của mình, tôi nhận được mỗi UDF nhiều lần - tuy nhiên khi tôi đang truyền một đối tượng đã được khởi tạo, tôi giả sử rằng nó không dùng thêm bất kỳ không gian bộ nhớ nào. Nếu bất cứ ai có thể xác nhận điều đó, nó sẽ hữu ích - tôi chỉ giả định thôi! Vấn đề thực sự duy nhất tôi có với phương pháp này là nó có vẻ hơi phức tạp.

  4. CFC ứng dụng của tôi mở rộng Utils CFC của tôi. Đây là những gì có rất nhiều khuôn khổ dường như làm. Tôi đã không sử dụng phương pháp này, nhưng tôi chắc chắn có những ưu và khuyết điểm.

  5. CFIBao gồm UDF của tôi từ các mẫu riêng biệt, trực tiếp trong Application.cfc Chức năng này tương tự như instantiating trong phạm vi Ứng dụng.

  6. Thêm UDFs tôi để của máy chủ Components.cfc Đó là một ý tưởng tuyệt vời về mặt lý thuyết - Tôi có thể duy trì một bản sao của Utils cơ sở và chắc chắn rằng tất cả mọi thứ trên máy chủ có thể truy cập chúng - Tuy nhiên, nếu tôi muốn chạy ứng dụng trên nhiều máy chủ thì tất cả chúng sẽ cần những chức năng đó. Thêm bất kỳ cập nhật nào cho máy chủ có thể ghi đè lên các thành phần. Nó chỉ cảm thấy như hack lõi - mà tôi chắc chắn tất cả chúng ta có thể atest từ kinh nghiệm cay đắng, là xấu.

Câu hỏi của tôi là: Cách tốt nhất để mở rộng CF với UDF một cách thanh lịch và có thể tái sử dụng là gì? Bất kỳ tùy chọn nào ở trên hoặc điều gì đó mà tôi không nghĩ đến?

+0

Tôi không đề xuất bất kỳ điều nào ở trên. Thay vào đó, hãy viết chúng trong các tệp .cfm và cfinclude chúng trong Application.cfc hoặc các trang cần chúng. Bạn có thể muốn có nhiều tệp, tùy thuộc vào việc chúng có nằm trong các chủ đề khác nhau hay không. –

+0

Đó không phải là lựa chọn 5? Vấn đề là các CFC khác cũng không được đóng gói - chúng phải tham khảo phạm vi Ứng dụng khi gọi các hàm. –

+0

Nó không phải là tùy chọn 5. Lựa chọn 5 như bạn đã viết nó hoặc là sẽ làm cho udf có sẵn cho chỉ một ứng dụng, hoặc chủ đề bạn để lặp lại mã. –

Trả lời

1

Nếu bạn thực sự quan tâm đến cấu trúc và giữ mọi thứ độc lập, thậm chí không bắt đầu với những người độc thân hoặc thừa kế mở rộng chức năng. Thay vào đó, hãy mở rộng chức năng cơ bản trong Coldfusion bằng cách thêm thư viện không phải thành phần của bạn vào thời gian chạy/yêu cầu, see ColdFusion Developer's Guide. Điều này không kỳ diệu giải quyết tất cả các vấn đề, nhưng ít nhất đó là cách thích hợp để thực hiện các chức năng mục đích chung.

+0

Tôi không chắc mình hiểu. Các tài liệu đề xuất tôi bao gồm các hàm đó trong phạm vi yêu cầu. Về mặt khái niệm, tôi không thấy nó khác với việc khởi tạo trong phạm vi Ứng dụng như thế nào. Các CFC khác của tôi sẽ vẫn dựa vào nó và phải gọi họ ngoài phạm vi của họ. Tôi thấy tôi sẽ không được instantiating với phương pháp này nhưng lợi ích là gì? –

+0

Các tài liệu không gợi ý rằng bạn đặt chức năng của mình trong phạm vi yêu cầu. Họ đang cho bạn thấy làm thế nào để làm như vậy nếu bạn muốn. –

+0

Ok, vì vậy đề nghị là tôi thêm UDF vào thời gian chạy và không bao gồm chúng trong một CFC. Điều gì xảy ra sau đó khi tôi muốn sử dụng một trong số chúng bên trong một CFC khác? Nếu tôi phải bao gồm các tập tin .cfm có chứa các UDFs trong constructor giả, không phải là xấu cho đóng gói? Tôi đã nghĩ rằng tốt hơn để có vị trí của tập tin như là một đối số cho phương pháp init - tại thời điểm đó không phải là nó dễ dàng hơn để có các UDFs trong một CFC instantiated và vượt qua đó như là một đối số? –