Files
progcode/web/public/assets/editorial/2024/modular-monolith-2024-allowed-directions.svg
T
huncode ecb66c82b3
Build and deploy / deploy (push) Successful in 15s
revise February 2024 modular monolith articles
2026-07-31 15:37:40 +03:00

57 lines
5.1 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 820 1040" role="img" aria-labelledby="title desc">
<title id="title">Разрешённые направления и публичные поверхности учебных модулей</title>
<desc id="desc">Модули catalog, checkout, payments и notifications разделены на API и internal. Стрелки разрешают checkout обращаться к API catalog и payments, а payments к API notifications. Пунктирная красная стрелка к catalog internal запрещена.</desc>
<defs>
<marker id="arrow-green" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 Z" fill="#39D49A"/></marker>
<marker id="arrow-red" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 Z" fill="#FB7185"/></marker>
</defs>
<rect width="820" height="1040" rx="28" fill="#0B1220"/>
<rect x="24" y="24" width="772" height="992" rx="20" fill="#111C30" stroke="#263653" stroke-width="2"/>
<text x="54" y="78" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="31" font-weight="700">Разрешённые направления</text>
<text x="54" y="112" fill="#B9C8DE" font-family="Arial, sans-serif" font-size="19">Каждая стрелка заканчивается на public API, не на весь модуль.</text>
<g font-family="Arial, sans-serif">
<rect x="58" y="184" width="276" height="176" rx="18" fill="#172740" stroke="#5D79A5" stroke-width="2"/>
<text x="82" y="222" fill="#F8FAFC" font-size="26" font-weight="700">catalog</text>
<rect x="80" y="242" width="232" height="43" rx="9" fill="#1E5A4E"/>
<text x="96" y="270" fill="#C9F7E1" font-size="19" font-weight="700">public: catalog.api</text>
<rect x="80" y="298" width="232" height="40" rx="9" fill="#263247"/>
<text x="96" y="324" fill="#B5C4D8" font-size="18">internal: catalog.internal</text>
<rect x="474" y="144" width="276" height="176" rx="18" fill="#172740" stroke="#5D79A5" stroke-width="2"/>
<text x="498" y="182" fill="#F8FAFC" font-size="26" font-weight="700">checkout</text>
<rect x="496" y="202" width="232" height="43" rx="9" fill="#1E5A4E"/>
<text x="512" y="230" fill="#C9F7E1" font-size="19" font-weight="700">public: checkout.api</text>
<rect x="496" y="258" width="232" height="40" rx="9" fill="#263247"/>
<text x="512" y="284" fill="#B5C4D8" font-size="18">internal: checkout.internal</text>
<rect x="474" y="498" width="276" height="176" rx="18" fill="#172740" stroke="#5D79A5" stroke-width="2"/>
<text x="498" y="536" fill="#F8FAFC" font-size="26" font-weight="700">payments</text>
<rect x="496" y="556" width="232" height="43" rx="9" fill="#1E5A4E"/>
<text x="512" y="584" fill="#C9F7E1" font-size="19" font-weight="700">public: payments.api</text>
<rect x="496" y="612" width="232" height="40" rx="9" fill="#263247"/>
<text x="512" y="638" fill="#B5C4D8" font-size="18">internal: payments.internal</text>
<rect x="58" y="748" width="276" height="176" rx="18" fill="#172740" stroke="#5D79A5" stroke-width="2"/>
<text x="82" y="786" fill="#F8FAFC" font-size="26" font-weight="700">notifications</text>
<rect x="80" y="806" width="232" height="43" rx="9" fill="#1E5A4E"/>
<text x="96" y="834" fill="#C9F7E1" font-size="19" font-weight="700">public: notifications.api</text>
<rect x="80" y="862" width="232" height="40" rx="9" fill="#263247"/>
<text x="96" y="888" fill="#B5C4D8" font-size="18">internal: notifications.internal</text>
</g>
<path d="M474 230 C420 230 390 252 334 260" fill="none" stroke="#39D49A" stroke-width="5" marker-end="url(#arrow-green)"/>
<text x="354" y="223" fill="#B6F4D8" font-family="Arial, sans-serif" font-size="17" font-weight="700">checkout → catalog.api</text>
<path d="M612 320 L612 498" fill="none" stroke="#39D49A" stroke-width="5" marker-end="url(#arrow-green)"/>
<text x="486" y="394" fill="#B6F4D8" font-family="Arial, sans-serif" font-size="17" font-weight="700">checkout →</text>
<text x="486" y="418" fill="#B6F4D8" font-family="Arial, sans-serif" font-size="17" font-weight="700">payments.api</text>
<path d="M474 606 C400 635 370 748 334 826" fill="none" stroke="#39D49A" stroke-width="5" marker-end="url(#arrow-green)"/>
<text x="230" y="604" fill="#B6F4D8" font-family="Arial, sans-serif" font-size="17" font-weight="700">payments → notifications.api</text>
<path d="M474 276 C412 316 378 328 312 316" fill="none" stroke="#FB7185" stroke-width="4" stroke-dasharray="11 9" marker-end="url(#arrow-red)"/>
<text x="350" y="351" fill="#FDA4AF" font-family="Arial, sans-serif" font-size="17" font-weight="700">запрещено: checkout → catalog.internal</text>
<rect x="358" y="920" width="392" height="68" rx="12" fill="#0E1727" stroke="#2B3A54" stroke-width="2"/>
<text x="378" y="950" fill="#B9C8DE" font-family="Arial, sans-serif" font-size="17">Не «весь модуль», а</text>
<text x="378" y="974" fill="#B9C8DE" font-family="Arial, sans-serif" font-size="17">«его public API по правилу».</text>
</svg>