पृष्ठभूमि:
मेरे पास एक मॉड्यूल है जो कई उदाहरण विधियों की घोषणा करता है
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
और मैं इनमें से कुछ तरीकों को एक कक्षा के भीतर से कॉल करना चाहता हूं। आप आम तौर पर माणिक में ऐसा कैसे करते हैं:
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
संकट
include UsefulThings
सभी तरीकों से लाता है UsefulThings
। इस मामले में मैं केवल चाहते हैं format_text
और स्पष्ट रूप से नहीं करना चाहते हैं get_file
और delete_file
।
मैं इसके कई संभावित समाधान देख सकता हूं:
- किसी भी तरह से बिना किसी तरह के मॉड्यूल पर सीधे विधि लागू करना
- मुझे नहीं पता कि यह कैसे किया जा सकता है। (इसलिए यह सवाल)
- किसी तरह शामिल है
Usefulthings
और केवल यह कुछ तरीकों में ले आओ- मुझे यह भी नहीं पता कि यह कैसे किया जा सकता है
- एक प्रॉक्सी क्लास बनाएं,
UsefulThings
उसमें शामिल करें , फिरformat_text
उस प्रॉक्सी इंस्टेंस को सौंपें- यह काम करेगा, लेकिन अनाम प्रॉक्सी कक्षाएं एक हैक हैं। छी।
- मॉड्यूल को 2 या अधिक छोटे मॉड्यूल में विभाजित करें
- यह भी काम करेगा, और शायद सबसे अच्छा समाधान है जिसके बारे में मैं सोच सकता हूं, लेकिन मैं इसे टालना पसंद करूंगा क्योंकि मैं दर्जनों और दर्जनों मॉड्यूलों के प्रसार के साथ समाप्त हो जाऊंगा - इसे प्रबंधित करना बोझ होगा
एकल मॉड्यूल में बहुत सारे असंबंधित कार्य क्यों हैं? यह ApplicationHelper
एक रैलिंग ऐप से है, जिसे हमारी टीम ने डंपिंग ग्राउंड के रूप में तय किया है, जो किसी भी अन्य जगह से संबंधित होने के लिए पर्याप्त नहीं है। ज्यादातर स्टैंडअलोन उपयोगिता विधियां जो हर जगह इस्तेमाल की जाती हैं। मैं इसे अलग-अलग सहायकों में तोड़ सकता था, लेकिन उनमें से 30 होंगे, सभी 1 विधि के साथ ... यह अनुत्पादक लगता है
module UT; def add1; self+1; end; def add2; self+2; end; end
और आप उपयोग करना चाहते हैं add1
लेकिन add2
कक्षा में नहीं Fixnum
। इसके लिए मॉड्यूल फ़ंक्शन करने में कैसे मदद मिलेगी? क्या मैं कुछ भूल रहा हूँ?
Module#included
कॉलबैक का उपयोग करके दूसरे को स्वचालित रूप से शामिल करेinclude
। इसformat_text
विधि को अपने स्वयं के मॉड्यूल में स्थानांतरित किया जा सकता है, क्योंकि यह अपने आप में उपयोगी लगता है। इससे प्रबंधन थोड़ा कम बोझ होगा।