பணி சார்ந்த கட்டமைப்பு¶
கஃபர் ஒரு பணி சார்ந்த கட்டமைப்பைக் கொண்டுள்ளது. இதன் பொருள் என்ன? சரி, காஃபர் சிறிய தீவுகளின் (சேவைகள்) தொகுப்பாக கட்டப்பட்டுள்ளது. ஒவ்வொரு தீவும் ஒரு குறிப்பிட்ட செயல்பாட்டை வழங்குகிறது. எடுத்துக்காட்டாக, மாதிரிகளை ஏற்றவும்/சேமிக்கவும், பட்டியல் கட்டமைப்பை வழங்கவும், செயல்தவிர் அமைப்பைக் கையாளவும் தனி சேவைகளைப் பயன்படுத்துகிறோம்.
Pyproject.toml இல் உள்ள நுழைவு புள்ளிகளாகச் சேவைகளை வரையறுக்கிறோம். நுழைவு புள்ளிகளுடன், பயன்பாடுகள் குறிப்பிட்ட நோக்கங்களுக்காகச் செயல்பாட்டைப் பதிவு செய்யலாம். நுழைவு புள்ளி குழுக்களுக்கும் *நுழைவு புள்ளிகளையும் குழுக் குழு செய்கிறது. எடுத்துக்காட்டாக, கட்டளை வரியிலிருந்து ஒரு பயன்பாட்டைத் தொடங்க கன்சோல்_ச்கிரிப்ட்ச் நுழைவு புள்ளி குழுவைப் பயன்படுத்துகிறோம்.
சேவைகள்¶
கஃபர் சேவைகளின் கருத்தை சுற்றி வடிவமைக்கப்பட்டுள்ளது. ஒவ்வொரு சேவையையும் பயன்பாட்டில் பதிவு செய்யலாம், பின்னர் அதை பிற சேவைகள் அல்லது பயன்பாட்டிற்குள் வாழும் பிற பொருள்களால் பயன்படுத்தலாம்.
ஒவ்வொரு சேவையும் பணி இடைமுகத்தை செயல்படுத்த வேண்டும். இந்த இடைமுகம் ஒரு முறையை வரையறுக்கிறது:
shutdown(self)
ஒரு சேவையை தூய்மை செய்ய வேண்டியிருக்கும் போது இது அழைக்கப்படுகிறது.
ஒவ்வொரு சேவையும் அதன் சொந்த முறைகளை வரையறுக்க அனுமதிக்கிறோம், சேவையும் செயல்படுத்தப்படும் வரை.
Pyproject.toml கோப்பில் உள்ள நுழைவு புள்ளிகளாக சேவைகளை வரையறுக்க வேண்டும்.
பொதுவாக, ஒரு பணி பின்னணியில் சில வேலை செய்கிறது. பயனர்களால் செயல்படுத்தக்கூடிய செயல்களையும் சேவைகள் அம்பலப்படுத்தலாம். எடுத்துக்காட்டாக, CTRL-Z விசை காம்போ (செயல்தவிர்) Undomanager சேவையால் செயல்படுத்தப்படுகிறது.
ஒரு சேவையும் மற்றொரு சேவையைப் பொறுத்தது. பணி துவக்கம் இந்த சார்புகளை தீர்க்கிறது. ஒரு பணி சார்புநிலையை வரையறுக்க, நுழைவு புள்ளியில் வரையறுக்கப்பட்ட அதன் பெயரால் அதை கட்டமைப்பாளரிடம் சேர்க்கவும்:
class MyService(Service):
def __init__(self, event_manager, element_factory):
self.event_manager = event_manager
self.element_factory = element_factory
event_manager.subscribe(self._element_changed)
def shutdown(self):
self.event_manager.unsubscribe(self._element_changed)
@event_handler(ElementChanged)
def _element_changed(self, event):
செயல்களை அம்பலப்படுத்தும் சேவைகள் ஆக்சன் ப்ரோவைடர் இடைமுகத்திலிருந்து பெற வேண்டும். இந்த இடைமுகத்திற்கு கூடுதல் முறைகள் செயல்படுத்தப்பட தேவையில்லை. செயல் முறைகள் @செயல் சிறுகுறிப்பு மூலம் சிறுகுறிப்பு செய்யப்பட வேண்டும்.
எடுத்துக்காட்டு: எலிமெண்ட்பாக்டரி¶
பயன்பாட்டில் உள்ள ஒரு சேவையின் ஒரு நல்ல எடுத்துக்காட்டு ElementFactory. இது முக்கிய சேவைகளில் ஒன்றாகும்.
ஒரு முக்கியமான நிகழ்வுகள் நிகழும்போது, ஒரு உறுப்பு உருவாக்கப்படுவது அல்லது அழிக்கப்படுவது போல, அந்த நிகழ்வு வெளிப்படும். செயல்தவிர் கணினியில் சேர்க்கை/அகற்று சமிக்ஞைகளை சேமிக்கும் ElementFactory க்கு ஒரு நிகழ்வு கையாளுபவரைப் பயன்படுத்துகிறோம். வெளிப்படும் நிகழ்வுகளின் மற்றொரு எடுத்துக்காட்டு Element உடன். அந்த வகுப்புகள், அல்லது இன்னும் குறிப்பாக, பண்புகள், ஒவ்வொரு முறையும் அவற்றின் நிலை மாறும்போது அறிவிப்புகளை அனுப்புகின்றன.
நுழைவு புள்ளிகள்¶
காஃபர் ஒரு முக்கிய :refentry புள்ளி <https://packaging.python.org/en/latest/specifications/entry-points/> gaphor.services எனப்படும் குழு.
தனிப்பட்ட கூறுகளுடன் செயல்பாடுகளை உடைக்கும்போது பயன்பாட்டின் முக்கிய செயல்பாட்டை செய்ய சேவைகள் பயன்படுத்தப்படுகின்றன. எடுத்துக்காட்டாக, உறுப்பு தொழிற்சாலை மற்றும் செயல்தவிர் மேலாளர் இருவரும் சேவைகள்.
முக்கிய செயல்பாட்டிற்கு அப்பால் கேஃபரை ஒரு துணை நிரலாக நீட்டிக்க செருகுநிரல்களையும் உருவாக்கலாம். எடுத்துக்காட்டாக, மாதிரி தரவை பிற பயன்பாடுகளுடன் இணைக்க ஒரு சொருகி உருவாக்கப்படலாம். செருகுநிரல்களும் சேவைகளாகவும் வரையறுக்கப்படுகின்றன. எடுத்துக்காட்டாக ஒரு புதிய எக்ச்எம்ஐ ஏற்றுமதி சொருகி pyproject.toml இல் பின்வருமாறு வரையறுக்கப்படும்:
[tool.poetry.plugins."gaphor.services"]
"xmi_export" = "gaphor.plugins.xmiexport:XMIExport"
இடைமுகங்கள்¶
ஒவ்வொரு சேவையும் (மற்றும் சொருகி) gaphor.abc.service இடைமுகத்தை செயல்படுத்த வேண்டும்:
Gaphor.abc.service இலிருந்து பெறும் மற்றொரு சிறப்பு பணி, இடைமுகம் கூறு சேவையாகும். இந்த இடைமுகத்தைப் பயன்படுத்தும் சேவைகள் சாளரங்கள் மற்றும் பயனர் இடைமுக செயல்பாட்டை வரையறுக்கப் பயன்படுகின்றன. ஒரு இடைமுகம் கூறு gaphor.ui.abc.uicomponent இடைமுகத்தை செயல்படுத்த வேண்டும்:
- class gaphor.ui.abc.UIComponent[source]¶
ஒரு பயனர் இடைமுக கூறு.
பொதுவாக, ஒரு பணி மற்றும் இடைமுகம் கூறு பட்டியல் உள்ளீடுகள் மூலம் பயனருக்கு சில செயல்களை வழங்க விரும்புகிறது. ஒவ்வொரு சேவையும் இடைமுகம் கூறுகளும் gaphor.abc.actionProvider இடைமுகத்தை செயல்படுத்துவதன் மூலம் செயல்களை விளம்பரப்படுத்தலாம்: