68 lines
4.3 KiB
XML
68 lines
4.3 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 650" role="img" aria-labelledby="title desc">
|
||
<title id="title">Проверка архитектурного решения через требования и доказательства</title>
|
||
<desc id="desc">Brief с пятью требованиями сравнивается с тремя вариантами. Синхронная запись с проекцией и синхронное чтение имеют gaps. Transactional outbox закрывает учебный brief. Evidence и assumption идут отдельными ветками.</desc>
|
||
<defs>
|
||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 Z" fill="#335e8a"/></marker>
|
||
<style>
|
||
.bg { fill: #f7f6f1; }
|
||
.title { fill: #17212b; font: 700 28px system-ui, -apple-system, sans-serif; }
|
||
.sub { fill: #52616d; font: 400 16px system-ui, -apple-system, sans-serif; }
|
||
.label { fill: #17212b; font: 700 18px system-ui, -apple-system, sans-serif; }
|
||
.text { fill: #334452; font: 400 15px system-ui, -apple-system, sans-serif; }
|
||
.mini { fill: #52616d; font: 600 13px system-ui, -apple-system, sans-serif; letter-spacing: .3px; }
|
||
.line { stroke: #335e8a; stroke-width: 3; marker-end: url(#arrow); }
|
||
.brief { fill: #eaf2fb; stroke: #2e6da4; stroke-width: 2; }
|
||
.option { fill: #fff; stroke: #8a969f; stroke-width: 2; }
|
||
.selected { fill: #e8f5ef; stroke: #25734f; stroke-width: 3; }
|
||
.decision { fill: #f1edf9; stroke: #7253a6; stroke-width: 3; }
|
||
.evidence { fill: #eaf2fb; stroke: #2e6da4; stroke-width: 2; }
|
||
.assumption { fill: #fff5dd; stroke: #b67813; stroke-width: 2; stroke-dasharray: 7 6; }
|
||
</style>
|
||
</defs>
|
||
<rect class="bg" width="960" height="650" rx="24"/>
|
||
<text class="title" x="48" y="54">Решение: requirements → gaps → выбранная граница</text>
|
||
<text class="sub" x="48" y="82">Нет score и «лучшего паттерна»: есть соответствие конкретному учебному brief.</text>
|
||
|
||
<rect class="brief" x="48" y="126" width="248" height="326" rx="16"/>
|
||
<text class="mini" x="74" y="158">BRIEF</text>
|
||
<text class="label" x="74" y="191">5 requirements</text>
|
||
<text class="text" x="74" y="225">• canonical write</text>
|
||
<text class="text" x="74" y="255">• recorded intent</text>
|
||
<text class="text" x="74" y="285">• independent read</text>
|
||
<text class="text" x="74" y="315">• explicit delay</text>
|
||
<text class="text" x="74" y="345">• replay key</text>
|
||
<text class="mini" x="74" y="404">NON-GOALS</text>
|
||
<text class="text" x="74" y="430">не distributed transaction</text>
|
||
|
||
<line class="line" x1="296" y1="285" x2="356" y2="285"/>
|
||
|
||
<rect class="option" x="356" y="118" width="250" height="96" rx="14"/>
|
||
<text class="label" x="380" y="151">sync write + projection</text>
|
||
<text class="text" x="380" y="184">gaps: intent, delay</text>
|
||
|
||
<rect class="selected" x="356" y="252" width="250" height="118" rx="14"/>
|
||
<text class="label" x="380" y="288">transactional outbox</text>
|
||
<text class="text" x="380" y="320">all declared requirements</text>
|
||
<text class="text" x="380" y="346">relay has explicit key</text>
|
||
|
||
<rect class="option" x="356" y="408" width="250" height="96" rx="14"/>
|
||
<text class="label" x="380" y="441">synchronous query</text>
|
||
<text class="text" x="380" y="474">gap: independent read</text>
|
||
|
||
<line class="line" x1="606" y1="311" x2="678" y2="311"/>
|
||
<rect class="decision" x="678" y="241" width="238" height="142" rx="16"/>
|
||
<text class="mini" x="704" y="275">DECISION</text>
|
||
<text class="label" x="704" y="310">accepted</text>
|
||
<text class="text" x="704" y="340">brief + option +</text>
|
||
<text class="text" x="704" y="363">reversibility</text>
|
||
|
||
<rect class="evidence" x="88" y="520" width="370" height="86" rx="14"/>
|
||
<text class="mini" x="114" y="550">EVIDENCE</text>
|
||
<text class="text" x="114" y="579">claim связан с brief и fixture</text>
|
||
<path d="M458 563 C535 563 596 473 680 378" fill="none" stroke="#2e6da4" stroke-width="2.5" marker-end="url(#arrow)"/>
|
||
|
||
<rect class="assumption" x="532" y="520" width="364" height="86" rx="14"/>
|
||
<text class="mini" x="558" y="550">ASSUMPTION</text>
|
||
<text class="text" x="558" y="579">condition for later review, not evidence</text>
|
||
</svg>
|