Files
document-haness/.run/executable-clean-architecture/assets/hexagonal-ports.svg
T

45 lines
6.0 KiB
XML
Executable File

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="620" viewBox="0 0 1440 620" role="img" aria-labelledby="title desc">
<title id="title">Feed query ports and adapters</title>
<desc id="desc">FeedController calls the concrete GetFeedUseCase; the application core owns FeedQueryPort, implemented by FeedQueryAdapter.</desc>
<metadata>{&quot;generator&quot;:&quot;_work/regenerate-technical-assets.py&quot;,&quot;canvas_policy&quot;:&quot;diagram-only&quot;,&quot;decorative_effects&quot;:false}</metadata>
<defs>
<marker id="arrow-ink" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 4 L 0 8 z" fill="#25282D"/></marker>
<marker id="arrow-muted" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 4 L 0 8 z" fill="#667085"/></marker>
<marker id="arrow-blue" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 4 L 0 8 z" fill="#1677FF"/></marker>
<marker id="arrow-purple" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 4 L 0 8 z" fill="#7556D8"/></marker>
<marker id="arrow-green" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 4 L 0 8 z" fill="#168A5B"/></marker>
<marker id="arrow-red" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 4 L 0 8 z" fill="#D64550"/></marker>
<marker id="arrow-amber" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 4 L 0 8 z" fill="#B7791F"/></marker>
</defs>
<rect width="1440" height="620" fill="#FFFFFF"/>
<polygon points="490,75 880,75 980,310 880,545 490,545 390,310" fill="#EAF3FF" stroke="#1677FF" stroke-width="2.3" />
<text x="685" y="125" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="13" font-weight="700" fill="#0B5CC4" text-anchor="middle" letter-spacing="0.8">application-core</text>
<rect x="540" y="205" width="290" height="120" fill="#FFFFFF" stroke="#0B5CC4" stroke-width="1.8" rx="8" />
<text x="685" y="259" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="16" font-weight="700" fill="#25282D" text-anchor="middle">GetFeedUseCase</text>
<text x="685" y="283" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="12" font-weight="450" fill="#667085" text-anchor="middle">
<tspan x="685" dy="0">concrete service</tspan>
<tspan x="685" dy="16.2">implements QueryUseCase&lt;Q,R&gt;</tspan>
</text>
<circle cx="400" cy="310" r="10" fill="#FFFFFF" stroke="#1677FF" stroke-width="2" />
<circle cx="970" cy="310" r="10" fill="#FFFFFF" stroke="#1677FF" stroke-width="2" />
<text x="410" y="285" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="11" font-weight="650" fill="#0B5CC4" text-anchor="start">input boundary</text>
<text x="960" y="285" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="12" font-weight="700" fill="#0B5CC4" text-anchor="end">FeedQueryPort</text>
<rect x="55" y="245" width="280" height="105" fill="#FFFFFF" stroke="#59616B" stroke-width="1.5" rx="8" />
<text x="195" y="291.5" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="16" font-weight="700" fill="#25282D" text-anchor="middle">FeedController</text>
<text x="195" y="316.5" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="12" font-weight="450" fill="#667085" text-anchor="middle">driving adapter</text>
<rect x="1060" y="245" width="300" height="105" fill="#FFFFFF" stroke="#59616B" stroke-width="1.5" rx="8" />
<text x="1210" y="291.5" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="16" font-weight="700" fill="#25282D" text-anchor="middle">FeedQueryAdapter</text>
<text x="1210" y="316.5" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="12" font-weight="450" fill="#667085" text-anchor="middle">driven adapter · implements port</text>
<path d="M 335 298 L 390 310" fill="none" stroke="#1677FF" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" marker-end="url(#arrow-blue)" />
<rect x="309.1" y="264" width="101.8" height="20" fill="#FFFFFF" rx="2" />
<text x="360" y="280" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="11" font-weight="650" fill="#1677FF" text-anchor="middle">Calls concrete</text>
<path d="M 830 265 L 925 265 L 925 310 L 960 310" fill="none" stroke="#1677FF" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" marker-end="url(#arrow-blue)" />
<rect x="839.7" y="232" width="120.6" height="20" fill="#FFFFFF" rx="2" />
<text x="900" y="248" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="11" font-weight="650" fill="#1677FF" text-anchor="middle">Calls output port</text>
<path d="M 1060 298 L 980 310" fill="none" stroke="#7556D8" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="7 5" marker-end="url(#arrow-purple)" />
<rect x="986.6" y="264" width="76.7" height="20" fill="#FFFFFF" rx="2" />
<text x="1025" y="280" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="11" font-weight="650" fill="#7556D8" text-anchor="middle">Implements</text>
<rect x="570" y="385" width="318.5" height="30" fill="#FFFFFF" stroke="#A8BCE0" stroke-width="1.2" rx="15" />
<text x="729.2" y="405" font-family='&quot;Noto Sans CJK KR&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif' font-size="12" font-weight="700" fill="#667085" text-anchor="middle">QueryUseCase&lt;Q,R&gt;는 별도 객체가 아닌 구현 계약</text>
</svg>