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ọ:
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.
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.
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.
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.
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.
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?
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. –
Đó 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. –
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ã. –