मैं एक अजगर अनुप्रयोग से निपट रहा हूं जिसमें कई वितरित हल्के घटकों को शामिल किया गया है जो RabbitMQ & Kombu का उपयोग करके संवाद करते हैं।फ्लास्क के साथ कक्षा में आरईएसटी व्यवहार जोड़ना, ब्लूप्रिंट के मामले?
एक घटक दो कतारों पर सुनता है और प्रत्येक कतार पर एकाधिक संदेश प्रकार प्राप्त कर सकता है। Subclasses कस्टम हैंडलर पंजीकृत करके प्रत्येक संदेश प्रकार को संसाधित करने के तरीके को ओवरराइड कर सकते हैं। यह सब ठीक काम करता है।
अब मेरे पास अतिरिक्त आवश्यकता है कि प्रत्येक घटक के पास मूल REST/HTML इंटरफ़ेस होना चाहिए। विचार यह है कि आप अपने ब्राउज़र को चल रहे घटक पर इंगित करते हैं और वर्तमान में जो कुछ भी कर रहे हैं उस पर रीयलटाइम जानकारी प्राप्त करें (यह कौन सा संदेश प्रसंस्करण कर रहा है, सीपीयू उपयोग, राज्य जानकारी, लॉग इत्यादि)
इसे हल्के वजन की आवश्यकता है, इसलिए कुछ शोध के बाद मैं फ्लास्क पर बस गया हूं (लेकिन सुझावों के लिए खुला हूं)। स्यूडोकोड में इसका मतलब है ले:
class Component:
Queue A
Queue B
...
def setup(..):
# connect to the broker & other initialization
def start(..):
# start the event loop and wait for work
def handle_msg_on_A(self,msg):
# dispatch a msg to a handler depending on the msg type
def handle_msg_on_B(self,msg):
...
...
और देखने के तरीकों की संख्या को जोड़ते:
@app.route('/')
def web_ui(self):
# render to a template
@app.route('/state')
def get_state(self):
# REST method to return some internal state info as JSON
...
हालांकि, इस तरह एक वर्ग पर एक वेब UI bolting SOLID सिद्धांतों टूट जाता है और (एक उपवर्ग विरासत के साथ समस्याओं को लाता है अधिक/कम जानकारी प्रदर्शित करना चाह सकते हैं)। सजावटी विरासत में नहीं हैं इसलिए प्रत्येक दृश्य विधि को स्पष्ट रूप से ओवरराइड और पुनर्वितरण की आवश्यकता होगी। शायद एक मिश्रण + प्रतिबिंब का उपयोग किसी भी तरह से काम कर सकता है लेकिन यह हैकिश लगता है।
इसके बजाए, रचना का उपयोग कर काम कर सकता है: वेब सामान को एक अलग वर्ग में रखें जो यूआरएल मार्गों को नेस्टेड घटक पर पॉलीमोर्फिक तरीकों के एक निश्चित, पूर्वनिर्धारित सेट पर प्रतिनिधि करता है। इस तरह के घटक लचीलेपन में कुछ नुकसान की लागत पर फ्लास्क से अनजान रहते हैं (उपलब्ध विधियों का सेट तय किया गया है)।
अब मैंने Flask blueprints और Application Dispatching खोजा है और ऐसा लगता है कि वे एक बेहतर, अधिक एक्स्टेंसिबल समाधान ला सकते हैं। हालांकि, मैंने अभी तक अपने सिर को लपेटना नहीं है।
मुझे लगता है कि मुझे यहां एक डिज़ाइन पैटर्न याद आ रहा है और उम्मीद है कि इस प्रकार की समस्या के साथ अधिक फ्लास्क-फ़ू या अनुभव वाला कोई व्यक्ति टिप्पणी कर सकता है।
कूल, उत्तर के लिए धन्यवाद, निश्चित रूप से इसमें देखेंगे और जवाब देगा अगर यह – dgorissen
पर काम करता है क्या यह @dgorissen काम करता है –