எடுத்துக்காட்டு: காஃபர் சேவைகள்

இந்த எடுத்துக்காட்டில் நாங்கள் கொஞ்சம் குறைவான கீழான ஒன்றைச் செய்கிறோம். Gaphor இல், சேவைகள் நுழைவு புள்ளிகள் என வரையறுக்கப்படுகின்றன. ஒவ்வொரு சேவையும் ஒரு வகை, மற்ற சேவைகளுடன் பொருந்தக்கூடிய பெயர்களுடன் அளவுருக்களை எடுக்கும். இது சேவைகளை மற்ற சேவைகளை சார்ந்து இருக்க அனுமதிக்கிறது.

இது இதுபோன்றதாகத் தெரிகிறது:

# entry point name: my_service
class MyService:
    ...

# entry point name: my_other_service
class MyOtherService:
    def __init__(self, my_service):
        ...

முதலில் நுழைவு புள்ளிகளை ஏற்றுவோம்.

from gaphor.entrypoint import load_entry_points

entry_points = load_entry_points("gaphor.services")

entry_points
{'auto_layout': gaphor.plugins.autolayout.pydot.AutoLayoutService,
 'component_registry': gaphor.services.componentregistry.ComponentRegistry,
 'console_window': gaphor.plugins.console.consolewindow.ConsoleWindow,
 'diagram_align': gaphor.ui.diagramalign.DiagramAlign,
 'diagram_export': gaphor.plugins.diagramexport.export.DiagramExport,
 'diagrams': gaphor.ui.diagrams.Diagrams,
 'element_dispatcher': gaphor.core.modeling.elementdispatcher.ElementDispatcher,
 'element_editor': gaphor.ui.elementeditor.ElementEditor,
 'element_factory': gaphor.core.modeling.elementfactory.ElementFactory,
 'event_manager': gaphor.core.eventmanager.EventManager,
 'export_menu': gaphor.ui.menufragment.MenuFragment,
 'file_manager': gaphor.ui.filemanager.FileManager,
 'html_report': gaphor.plugins.htmlreport.report.HtmlReportExport,
 'main_window': gaphor.ui.mainwindow.MainWindow,
 'model_browser': gaphor.ui.modelbrowser.ModelBrowser,
 'model_changed': gaphor.ui.modelchanged.ModelChanged,
 'modeling_language': gaphor.services.modelinglanguage.ModelingLanguageService,
 'properties': gaphor.services.properties.Properties,
 'recent_files': gaphor.ui.recentfiles.RecentFiles,
 'recovery': gaphor.storage.recovery.Recovery,
 'sanitizer': gaphor.UML.sanitizerservice.SanitizerService,
 'toolbox': gaphor.ui.toolbox.Toolbox,
 'tools_menu': gaphor.ui.menufragment.MenuFragment,
 'undo_actions': gaphor.ui.undoactions.UndoActions,
 'undo_manager': gaphor.services.undomanager.UndoManager}

இப்போது ஒவ்வொரு சேவைக்கும் எங்கள் மாதிரியில் ஒரு கூறுகளை உருவாக்குவோம்.

from gaphor import UML
from gaphor.core.modeling import ElementFactory

element_factory = ElementFactory()

def create_component(name):
    c = element_factory.create(UML.Component)
    c.name = name
    return c

components = {name: create_component(name) for name in entry_points}
components
{'auto_layout': <gaphor.UML.uml.Component element ca94501e-744d-11f1-85a7-5245ba1f70a7>,
 'component_registry': <gaphor.UML.uml.Component element ca945532-744d-11f1-85a7-5245ba1f70a7>,
 'console_window': <gaphor.UML.uml.Component element ca94582a-744d-11f1-85a7-5245ba1f70a7>,
 'diagram_align': <gaphor.UML.uml.Component element ca945a6e-744d-11f1-85a7-5245ba1f70a7>,
 'diagram_export': <gaphor.UML.uml.Component element ca945e42-744d-11f1-85a7-5245ba1f70a7>,
 'diagrams': <gaphor.UML.uml.Component element ca94607c-744d-11f1-85a7-5245ba1f70a7>,
 'element_dispatcher': <gaphor.UML.uml.Component element ca9462a2-744d-11f1-85a7-5245ba1f70a7>,
 'element_editor': <gaphor.UML.uml.Component element ca9464aa-744d-11f1-85a7-5245ba1f70a7>,
 'element_factory': <gaphor.UML.uml.Component element ca9466b2-744d-11f1-85a7-5245ba1f70a7>,
 'event_manager': <gaphor.UML.uml.Component element ca9468ba-744d-11f1-85a7-5245ba1f70a7>,
 'export_menu': <gaphor.UML.uml.Component element ca946ab8-744d-11f1-85a7-5245ba1f70a7>,
 'file_manager': <gaphor.UML.uml.Component element ca946cca-744d-11f1-85a7-5245ba1f70a7>,
 'html_report': <gaphor.UML.uml.Component element ca946ee6-744d-11f1-85a7-5245ba1f70a7>,
 'main_window': <gaphor.UML.uml.Component element ca9470e4-744d-11f1-85a7-5245ba1f70a7>,
 'model_browser': <gaphor.UML.uml.Component element ca9472f6-744d-11f1-85a7-5245ba1f70a7>,
 'model_changed': <gaphor.UML.uml.Component element ca9474ea-744d-11f1-85a7-5245ba1f70a7>,
 'modeling_language': <gaphor.UML.uml.Component element ca9476e8-744d-11f1-85a7-5245ba1f70a7>,
 'properties': <gaphor.UML.uml.Component element ca9478f0-744d-11f1-85a7-5245ba1f70a7>,
 'recent_files': <gaphor.UML.uml.Component element ca947ae4-744d-11f1-85a7-5245ba1f70a7>,
 'recovery': <gaphor.UML.uml.Component element ca947d14-744d-11f1-85a7-5245ba1f70a7>,
 'sanitizer': <gaphor.UML.uml.Component element ca947f12-744d-11f1-85a7-5245ba1f70a7>,
 'toolbox': <gaphor.UML.uml.Component element ca948106-744d-11f1-85a7-5245ba1f70a7>,
 'tools_menu': <gaphor.UML.uml.Component element ca948408-744d-11f1-85a7-5245ba1f70a7>,
 'undo_actions': <gaphor.UML.uml.Component element ca948624-744d-11f1-85a7-5245ba1f70a7>,
 'undo_manager': <gaphor.UML.uml.Component element ca94880e-744d-11f1-85a7-5245ba1f70a7>}

அனைத்து கூறுகளையும் வரைபடமாக்குவதன் மூலம், கட்டமைப்பாளர் அளவுரு பெயர்களின் அடிப்படையில் அந்த கூறுகளுக்கு இடையில் சார்புகளை உருவாக்கலாம்.

import inspect

for name, cls in entry_points.items():
    for param_name in inspect.signature(cls).parameters:
        if param_name not in components:
            continue

        dep = element_factory.create(UML.Usage)
        dep.client = components[name]
        dep.supplier = components[param_name]

மாதிரியில் உள்ள அனைத்து கூறுகளையும் கொண்டு, நாம் ஒரு வரைபடத்தை உருவாக்கலாம். வரைபடத்தின் கூறுகள் மற்றும் சார்புகளை கைவிட்டு, தானாகவே லேஅவுட் அதன் மந்திரத்தை செய்யட்டும்.

சார்புநிலையை அழகாக மாற்ற, நாம் ஒரு பாணி தாளைச் சேர்க்க வேண்டும். GUI வழியாக நீங்கள் ஒரு புதிய வரைபடத்தை உருவாக்கினால், இந்த உறுப்பு தானாகவே சேர்க்கப்படும்.

from gaphor.core.modeling import StyleSheet
from gaphor.diagram.drop import drop

element_factory.create(StyleSheet)
diagram = element_factory.create(UML.Diagram)

for element in element_factory.lselect():
    drop(element, diagram, x=0, y=0)

கடைசி கட்டம் தளவமைப்பு மற்றும் வரைபடத்தை வரைய வேண்டும்.

from gaphor.extensions.ipython import auto_layout, draw

auto_layout(diagram)

draw(diagram, format="svg")
_images/38a427e1e1757886d8dbe68601f33791443b66d62cbd65d377dfaddfc73692b9.svg

அவ்வளவுதான். வரைபடத்திலிருந்து நீங்கள் பார்க்க முடியும் என, நிறைய சேவைகள் Eventanagager ஐ நம்பியுள்ளன.