Design: ramifications for the Event-Log
Expand on this problem with the consequences of rule changes. Need to consider how recording this information is related to the data structures of the Event-Log... __Remark__: this topic belongs into the ''next planned'' Vertical Slice »LoadClip«
This commit is contained in:
parent
38ea195555
commit
8bff48fd2f
2 changed files with 200 additions and 33 deletions
|
|
@ -2177,12 +2177,32 @@ Similar to an Asset, an identification tuple is available (generated on the fly)
|
|||
→ MetaAsset
|
||||
</pre>
|
||||
</div>
|
||||
<div title="EventLog" creator="Ichthyostega" modifier="Ichthyostega" created="202510092241" modified="202510092241" tags="Mutation def design draft" changecount="2">
|
||||
<pre>//The global ''Event Log'' records the fact that something ''has happened'' as result from a command or instruction.//
|
||||
The EventLog is a central element of the ''CQRS'' architecture model.</pre>
|
||||
<div title="EventCQRS" creator="Ichthyostega" modifier="Ichthyostega" created="202510122028" modified="202510122047" tags="Concepts Model Mutation def" changecount="3">
|
||||
<pre>//~Command-and-Query-Responsibility-Separation (CQRS) describes an asynchronous architecture without a central data model.//
|
||||
In this arrangement of components, the old guideline to separate the processing of queries and mutations is applied to the relation of interfaces and functional clusters within the system. The chain of //business logic// processing is completely segregated from the date models and is organised essentially as a pipeline, where desired operations are instructed as //commands//. Each command is validated, and then performed within a conditioned environment, which is isolated from the persistent data in the system. The effect of a command execution is then propagated and distributed to various //»projections«// to produce the actual persistent mutation of the data in the system. On the other hand, any interface to query the state and the data content is provided by services altogether unrelated to any //processing// in the system.
|
||||
|
||||
An architecture based on CQRS can be challenging to build properly, because any //effect// has to be //represented// instead of //just happening//. Yet this architecture style is known to offer several unique benefits:
|
||||
* processing is guaranteed to be side-effect free
|
||||
* it is easy to define and verify well-defined behaviour for each command
|
||||
* it is possible to maintain several, specialised projections which focus on specific aspects of the effect
|
||||
* the data model within some query-oriented service is an implementation detail and can be modified at will, as long as the defined effect is retained.
|
||||
|
||||
CQRS is typically combined with EventSourcing to represent the effects of processing as a sequence of //events// in an EventLog
|
||||
</pre>
|
||||
</div>
|
||||
<div title="EventSourcing" creator="Ichthyostega" modifier="Ichthyostega" created="202510092238" modified="202510092239" tags="Concepts Model Mutation discuss draft" changecount="2">
|
||||
<pre>//''Event Sourcing'' is an Architecture pattern and used together with ''CQRS''.//
|
||||
<div title="EventLog" creator="Ichthyostega" modifier="Ichthyostega" created="202510092241" modified="202510122053" tags="Mutation def design draft" changecount="4">
|
||||
<pre>//The global ''Event Log'' records the fact that something ''has happened'' as result from a command or instruction.//
|
||||
The EventLog is a central element of the [[CQRS|EventCQRS]] architecture model.
|
||||
After some //event has been recorded,// it is propagated to the »projections«, which are listeners to the event log and may mutate their internal state in response to some event. Notably a data model is attached as a projection, and thus the complete content of such a data model can be seen as a materialisation of the event sequence. The entire state of the data in the model can any time be reproduced by //re-playing// the entire event log to a clean slate.
|
||||
|
||||
!Structure of Events
|
||||
First and foremost, each event must be well defined and can be addressed by an unique identifier (hash based). Furthermore, each event is marked with a specification version -- and the implementation of the the expected effects of a given version is never changed. This allows the system to evolve while in use: improved implementations of some event can coexist with earlier versions of the same event in the same log.
|
||||
|
||||
Events serve as foundation to allow corrections and revisions of the history of events: any event can be un-done, by replaying the event log without the event in question. In practice however this requirement can be difficult to uphold, since it might lead to a proliferation of complicated events. It is thus desirable to introduce //transactions// -- defined as a group of events which are considered to happen in compound. Each such group or transactional compound of events is considered itself an event. Notably the processing of some //command// might produce several events, some of which are generated automatically to reflect effects of this command based on the current state of data, rules and configuration. As an example, if the execution of business logic needs to query fro some default, this processing of a rule query might generate a //binding//, which also becomes part of the next state and thus need to be represented as a further event within that command's transactional event group.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="EventSourcing" creator="Ichthyostega" modifier="Ichthyostega" created="202510092238" modified="202510122002" tags="Concepts Model Mutation discuss draft" changecount="3">
|
||||
<pre>//''Event Sourcing'' is an Architecture pattern and used together with [[CQRS|EventCQRS]].//
|
||||
Over the course of the years, it gradually became clear that the goals defined regarding consistency and fine-grained control of the arrangement in the session seem to converge towards an architecture based on these principles
|
||||
|
||||
!Difficulties and Contradictions
|
||||
|
|
|
|||
|
|
@ -72073,6 +72073,16 @@
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1760290158112" ID="ID_411997680" MODIFIED="1760290160206" TEXT="Aufbau">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289434421" ID="ID_449257180" MODIFIED="1760290148379" TEXT="gründen">
|
||||
<linktarget COLOR="#4e2254" DESTINATION="ID_449257180" ENDARROW="Default" ENDINCLINATION="93;401;" ID="Arrow_ID_1541372568" SOURCE="ID_429087289" STARTARROW="Default" STARTINCLINATION="118;-340;"/>
|
||||
<icon BUILTIN="stop"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289493168" ID="ID_1994509660" MODIFIED="1760289904035" TEXT="wird behandelt im »LoadClip Vertical Slice«">
|
||||
<linktarget COLOR="#584786" DESTINATION="ID_1994509660" ENDARROW="Default" ENDINCLINATION="-1547;94;" ID="Arrow_ID_272113141" SOURCE="ID_542201944" STARTARROW="None" STARTINCLINATION="-915;99;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1482524530842" FOLDED="true" ID="ID_606738640" MODIFIED="1573230611958" TEXT="Dependency-Injection">
|
||||
<icon BUILTIN="wizard"/>
|
||||
|
|
@ -75112,6 +75122,70 @@
|
|||
<linktarget COLOR="#39203f" DESTINATION="ID_1274218971" ENDARROW="Default" ENDINCLINATION="-2004;321;" ID="Arrow_ID_402250137" SOURCE="ID_1567517561" STARTARROW="None" STARTINCLINATION="-366;34;"/>
|
||||
<font NAME="SansSerif" SIZE="14"/>
|
||||
<node CREATED="1743090788235" ID="ID_1690109528" MODIFIED="1743090794217" TEXT="EventSequence">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289434421" ID="ID_429087289" MODIFIED="1760290591077" TEXT="gründen">
|
||||
<arrowlink COLOR="#4e2254" DESTINATION="ID_449257180" ENDARROW="Default" ENDINCLINATION="93;401;" ID="Arrow_ID_1541372568" STARTARROW="Default" STARTINCLINATION="118;-340;"/>
|
||||
<linktarget COLOR="#5a2c64" DESTINATION="ID_429087289" ENDARROW="Default" ENDINCLINATION="-337;717;" ID="Arrow_ID_1229525112" SOURCE="ID_697833271" STARTARROW="Default" STARTINCLINATION="-70;-227;"/>
|
||||
<icon BUILTIN="stop"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289493168" ID="ID_353677371" MODIFIED="1760289904035" TEXT="wird behandelt im »LoadClip Vertical Slice«">
|
||||
<linktarget COLOR="#584786" DESTINATION="ID_353677371" ENDARROW="Default" ENDINCLINATION="-1547;94;" ID="Arrow_ID_1323221919" SOURCE="ID_542201944" STARTARROW="None" STARTINCLINATION="-915;99;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node CREATED="1760290612705" ID="ID_1680721674" MODIFIED="1760290621696" TEXT="Vorüberlegungen...">
|
||||
<node CREATED="1760290636441" ID="ID_1757227376" MODIFIED="1760290643322" TEXT="Anforderungen an die Datenstruktur">
|
||||
<node CREATED="1760290647303" ID="ID_511428420" MODIFIED="1760290652188" TEXT="muß massiv performant sein"/>
|
||||
<node CREATED="1760290659559" ID="ID_1137179871" MODIFIED="1760290675141" TEXT="muß algebraische Terme darstellen können"/>
|
||||
<node CREATED="1760290698375" ID="ID_1806028245" MODIFIED="1760290705116" TEXT="Stuktur ist verzweigt (DAG)">
|
||||
<node CREATED="1760290720159" ID="ID_1489858814" LINK="#ID_1366477493" MODIFIED="1760290726438" TEXT="an Git orientiert"/>
|
||||
</node>
|
||||
<node CREATED="1760290765153" ID="ID_1965009573" MODIFIED="1760290778114" TEXT="wird eingebunden / projiziert in die Session-Storage"/>
|
||||
</node>
|
||||
<node CREATED="1760290799532" ID="ID_101660410" MODIFIED="1760290805527" TEXT="Einsichten zu den Inhalten">
|
||||
<node CREATED="1760290815078" ID="ID_1381159688" MODIFIED="1760290820685" TEXT="es muß Transaktionen geben">
|
||||
<node CREATED="1760290827272" ID="ID_601269910" MODIFIED="1760290840162" TEXT="diese werden atomar angewendet"/>
|
||||
<node CREATED="1760290841775" ID="ID_84971374" MODIFIED="1760290859371" TEXT="und sind stets auf einen Schlag kohärent"/>
|
||||
</node>
|
||||
<node CREATED="1760290911685" ID="ID_288871177" MODIFIED="1760290916144" TEXT="Einzel-Events">
|
||||
<node CREATED="1760290928529" ID="ID_161648807" MODIFIED="1760290956106" TEXT="müssen eindeutig referenzierbar sein (wie ein Git-Commit)">
|
||||
<node CREATED="1760291338031" ID="ID_647774998" MODIFIED="1760291368571" TEXT="Event hat eine Spezifikations-Version"/>
|
||||
<node CREATED="1760291369711" ID="ID_1082525433" MODIFIED="1760291382258" TEXT="und verweist weiter auf eine Transaktion"/>
|
||||
</node>
|
||||
<node CREATED="1760290964798" ID="ID_338394744" MODIFIED="1760290971118" TEXT="müssen einfach aufgebaut sein">
|
||||
<node CREATED="1760290972596" ID="ID_1660533264" MODIFIED="1760290980623" TEXT="so daß man die Basis stets parsen kann"/>
|
||||
<node CREATED="1760290985174" ID="ID_1509773064" MODIFIED="1760290996274" TEXT="es gibt also einen Kontrakt / ein Interface"/>
|
||||
</node>
|
||||
<node CREATED="1760290998998" ID="ID_262909756" MODIFIED="1760291013607" TEXT="müssen vorwärtskompatibel erweiterbar sein">
|
||||
<node CREATED="1760291018814" ID="ID_381563193" MODIFIED="1760291034301" TEXT="heißt: auch eine alte Programmversion kann ein neues Log lesen"/>
|
||||
<node CREATED="1760291045043" ID="ID_357414991" MODIFIED="1760291059135" TEXT="folglich muß es opaque Datenblöcke geben"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1760291458691" ID="ID_1051203255" MODIFIED="1760291471575" TEXT="vom Event zum Datenbestand">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1760291479155" ID="ID_971039308" MODIFIED="1760291489877" TEXT="das ist die »Projektion«">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1760291623073" ID="ID_1229727812" MODIFIED="1760291630671" TEXT="Relevanz dieses Verhältnisses">
|
||||
<node CREATED="1760291632308" ID="ID_349059628" MODIFIED="1760291638390" TEXT="Fehlersuche / »blame«"/>
|
||||
<node CREATED="1760291641394" ID="ID_665966975" MODIFIED="1760291722881" TEXT="Relevant für den Regel-Beweisweg">
|
||||
<node CREATED="1760291727774" ID="ID_1414435341" MODIFIED="1760291781021" TEXT="Verhältnis aber noch nicht klar">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Naiverweise dachte ich zunächst, daß da eine direkte Verbindung zum Eventlog besteht. Das widerspricht aber der Idee einer Projektion
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1760291866916" ID="ID_1612624181" MODIFIED="1760292073525" TEXT="eine Regel-Anwendung erzeugt ein Binding ⟹ das ist ein Event">
|
||||
<arrowlink COLOR="#ff694a" DESTINATION="ID_1279149428" ENDARROW="Default" ENDINCLINATION="-3888;-258;" ID="Arrow_ID_1367334728" STARTARROW="None" STARTINCLINATION="-2727;124;"/>
|
||||
<linktarget COLOR="#fdeeba" DESTINATION="ID_1612624181" ENDARROW="Default" ENDINCLINATION="-240;11;" ID="Arrow_ID_913478648" SOURCE="ID_1622939135" STARTARROW="None" STARTINCLINATION="-88;-141;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1760291809839" ID="ID_1488496327" MODIFIED="1760291819542" TEXT="ein Datenpfad geht in das Event ein"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1743090850377" ID="ID_1180602920" MODIFIED="1743090852748" TEXT="Struktur">
|
||||
<node CREATED="1743090853688" ID="ID_465643814" MODIFIED="1743090858340" TEXT="ist verzweigt als DAG">
|
||||
<node CREATED="1743091056973" ID="ID_1420852221" MODIFIED="1743091067998" TEXT="Basis-Entscheidungen entwickeln sich weiter"/>
|
||||
|
|
@ -75150,7 +75224,7 @@
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1743091423731" ID="ID_782853432" MODIFIED="1743091439152" TEXT="zunächst: unklar was das bedeutet">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1743091597060" ID="ID_1622939135" MODIFIED="1760045895659">
|
||||
<node CREATED="1743091597060" ID="ID_1622939135" MODIFIED="1760291930784">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -75163,6 +75237,7 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#7a224a" DESTINATION="ID_530436147" ENDARROW="Default" ENDINCLINATION="-2031;120;" ID="Arrow_ID_645695046" STARTARROW="None" STARTINCLINATION="-3819;455;"/>
|
||||
<arrowlink COLOR="#fdeeba" DESTINATION="ID_1612624181" ENDARROW="Default" ENDINCLINATION="-240;11;" ID="Arrow_ID_913478648" STARTARROW="None" STARTINCLINATION="-88;-141;"/>
|
||||
<linktarget COLOR="#ac858f" DESTINATION="ID_1622939135" ENDARROW="Default" ENDINCLINATION="-227;-9;" ID="Arrow_ID_1337260949" SOURCE="ID_89103091" STARTARROW="None" STARTINCLINATION="185;8;"/>
|
||||
<node CREATED="1743091754943" ID="ID_1154146518" MODIFIED="1743091765465" TEXT="zwei Möglichkeiten des Umgangs">
|
||||
<node CREATED="1743091780481" ID="ID_497944249" MODIFIED="1760046019584" TEXT="kaskadierende Propagation">
|
||||
|
|
@ -75214,7 +75289,7 @@
|
|||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...indem nämlich eine Regel oder Entscheidungsbasis <i>gesperrt</i>  wird, sobald sie einmal zur Anwendung gekommen ist; so ein Mechanismus ließe sich mit relativ geringem Aufwand realisieren, und würde zumindest stets ermöglichen, daß man das Entstehen eines Konflikts erkennt und dann warnt. Dies wäre sozusagen die »optimistische« Herangehensweise: meist geht ja alles gut....
|
||||
...indem nämlich eine Regel oder Entscheidungsbasis <i>gesperrt</i> wird, sobald sie einmal zur Anwendung gekommen ist; so ein Mechanismus ließe sich mit relativ geringem Aufwand realisieren, und würde zumindest stets ermöglichen, daß man das Entstehen eines Konflikts erkennt und dann warnt. Dies wäre sozusagen die »optimistische« Herangehensweise: meist geht ja alles gut....
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
|
|
@ -75703,6 +75778,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1760288791972" HGAP="45" ID="ID_1176765103" MODIFIED="1760288973409" TEXT="Instructor" VSHIFT="4">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1533400671533" HGAP="45" ID="ID_1357977461" MODIFIED="1557498707237" TEXT="Command-Ausführung" VSHIFT="-27">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1533400693522" ID="ID_217032156" MODIFIED="1557498707237" TEXT="Commands sollen geloggt werden">
|
||||
|
|
@ -75727,6 +75803,24 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1760288853827" ID="ID_389071890" MODIFIED="1760288862054" TEXT="Verbindung zum Event-Log">
|
||||
<node CREATED="1760288929782" ID="ID_1717739696" MODIFIED="1760288944238" TEXT="erfolgreich ausgeführtes Command ⟹ Event"/>
|
||||
<node CREATED="1760289226217" ID="ID_612285290" MODIFIED="1760289229892" TEXT="Anordnung">
|
||||
<node CREATED="1760289245790" ID="ID_1653102696" MODIFIED="1760289315260" TEXT="das Event-Log-System gehört zur Application-Core"/>
|
||||
<node CREATED="1760289316269" ID="ID_1914314967" MODIFIED="1760289334798" TEXT="der Instructor ist ein Subsystem im Steam-Layer"/>
|
||||
<node CREATED="1760289342569" ID="ID_104829051" MODIFIED="1760289363186" TEXT="das konkrete Event-Log ist der Kern der Session-Storage"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289434421" ID="ID_697833271" MODIFIED="1760290591077" TEXT="gründen">
|
||||
<arrowlink COLOR="#5a2c64" DESTINATION="ID_429087289" ENDARROW="Default" ENDINCLINATION="-337;717;" ID="Arrow_ID_1229525112" STARTARROW="Default" STARTINCLINATION="-70;-227;"/>
|
||||
<linktarget COLOR="#403e5a" DESTINATION="ID_697833271" ENDARROW="Default" ENDINCLINATION="44;193;" ID="Arrow_ID_1022959992" SOURCE="ID_685280794" STARTARROW="Default" STARTINCLINATION="67;-365;"/>
|
||||
<icon BUILTIN="stop"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289493168" ID="ID_501149716" MODIFIED="1760289904035" TEXT="wird behandelt im »LoadClip Vertical Slice«">
|
||||
<linktarget COLOR="#584786" DESTINATION="ID_501149716" ENDARROW="Default" ENDINCLINATION="-1547;94;" ID="Arrow_ID_1734617256" SOURCE="ID_542201944" STARTARROW="None" STARTINCLINATION="-915;99;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1481778538165" FOLDED="true" HGAP="37" ID="ID_522398894" MODIFIED="1561827466184" TEXT="ProcDispatcher" VSHIFT="12">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1481826274018" HGAP="18" ID="ID_1916296972" MODIFIED="1518487921096" TEXT="Requirements" VSHIFT="-7">
|
||||
|
|
@ -76130,11 +76224,18 @@
|
|||
<node COLOR="#435e98" CREATED="1533401646479" ID="ID_305001887" MODIFIED="1557498707237" TEXT="das große wartende MEGA-Integrations-Thema">
|
||||
<font NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
<node CREATED="1680563617807" ID="ID_1592313170" MODIFIED="1680563626215" TEXT="vorläufig...">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289434421" ID="ID_685280794" MODIFIED="1760290570376" TEXT="Builder: Grundaufbau">
|
||||
<arrowlink COLOR="#403e5a" DESTINATION="ID_697833271" ENDARROW="Default" ENDINCLINATION="44;193;" ID="Arrow_ID_1022959992" STARTARROW="Default" STARTINCLINATION="67;-365;"/>
|
||||
<icon BUILTIN="stop"/>
|
||||
<node CREATED="1680563617807" ID="ID_1592313170" MODIFIED="1760290443774" TEXT="vorläufig...">
|
||||
<node CREATED="1680563627851" ID="ID_804147257" MODIFIED="1680563627851" TEXT="Fake-build: einfacher Clip">
|
||||
<linktarget COLOR="#fec499" DESTINATION="ID_804147257" ENDARROW="Default" ENDINCLINATION="-696;77;" ID="Arrow_ID_521000760" SOURCE="ID_573821275" STARTARROW="None" STARTINCLINATION="-206;21;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289493168" HGAP="32" ID="ID_1814100289" MODIFIED="1760290469342" TEXT="wird erstmals behandelt im »LoadClip Vertical Slice«" VSHIFT="2">
|
||||
<linktarget COLOR="#584786" DESTINATION="ID_1814100289" ENDARROW="Default" ENDINCLINATION="-1569;86;" ID="Arrow_ID_744418079" SOURCE="ID_542201944" STARTARROW="None" STARTINCLINATION="-915;99;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node CREATED="1720141000407" ID="ID_301474820" MODIFIED="1720141011879" TEXT="gesammelte Pläne und Skizzen">
|
||||
<node COLOR="#415566" CREATED="1751643957882" ID="ID_1161768536" MODIFIED="1751643982518" TEXT="die ersten Entwürfe von 2008">
|
||||
<icon BUILTIN="licq"/>
|
||||
|
|
@ -76262,6 +76363,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1448314932726" ID="ID_669869188" MODIFIED="1557498707237" POSITION="right" TEXT="Render">
|
||||
<icon BUILTIN="stop"/>
|
||||
<node CREATED="1512923568305" ID="ID_1329323311" MODIFIED="1557498707237" TEXT="Player">
|
||||
|
|
@ -110101,9 +110203,10 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711548381477" ID="ID_664146362" MODIFIED="1734654370564" TEXT="Buffer-Manager">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711548381477" ID="ID_664146362" MODIFIED="1760292477862" TEXT="Buffer-Manager">
|
||||
<linktarget COLOR="#5a4f77" DESTINATION="ID_664146362" ENDARROW="Default" ENDINCLINATION="-493;1406;" ID="Arrow_ID_297212964" SOURCE="ID_1433806835" STARTARROW="None" STARTINCLINATION="-1768;-2925;"/>
|
||||
<linktarget COLOR="#fec499" DESTINATION="ID_664146362" ENDARROW="Default" ENDINCLINATION="-1409;197;" ID="Arrow_ID_616778881" SOURCE="ID_722733788" STARTARROW="None" STARTINCLINATION="-794;96;"/>
|
||||
<linktarget COLOR="#ff4400" DESTINATION="ID_664146362" ENDARROW="Default" ENDINCLINATION="-1857;303;" ID="Arrow_ID_1425526052" SOURCE="ID_634625719" STARTARROW="None" STARTINCLINATION="-1363;105;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1719249646221" ID="ID_403017464" MODIFIED="1719249923835" TEXT="Begriffe klarstellen">
|
||||
<arrowlink COLOR="#4b5a6c" DESTINATION="ID_1263834914" ENDARROW="Default" ENDINCLINATION="-668;-90;" ID="Arrow_ID_767640863" STARTARROW="None" STARTINCLINATION="-873;115;"/>
|
||||
|
|
@ -159947,8 +160050,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
Es wird also definitiv nicht »der Clip« den Code enthalten, wie <i>er sich selber rendert,</i> oder »der Track« den Code enhalten, mit dem Medien-Inhalte kombiniert und verarbeitet werden.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1748821580331" ID="ID_586599540" MODIFIED="1748821639455" TEXT="Möglichkeit zur Anreicherung mit weiteren Metadaten wird benötigt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -160047,8 +160149,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
Ort der <b>Entscheidungs-Logik</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node CREATED="1760027996136" ID="ID_246985163" MODIFIED="1760028782839" TEXT="wie kann Code »verständlich« sein?">
|
||||
<node CREATED="1760028044687" ID="ID_847296862" MODIFIED="1760028065429">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -160058,8 +160159,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
der Code <i>macht was</i> — und man weiß darum
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1760028079443" ID="ID_944833118" MODIFIED="1760028162021">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -160069,8 +160169,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
Trennung in <b>Business</b>-Kern, Framework und Library
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#3797e8" DESTINATION="ID_944833118" ENDARROW="Default" ENDINCLINATION="183;-12;" ID="Arrow_ID_481927224" SOURCE="ID_407734575" STARTARROW="None" STARTINCLINATION="-184;10;"/>
|
||||
</node>
|
||||
<node CREATED="1760028675187" ID="ID_1058819561" MODIFIED="1760028714414">
|
||||
|
|
@ -160081,8 +160180,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
Code ist faktorisiert in <i>getrennte Sachverhalte</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1760029030100" ID="ID_1676355762" MODIFIED="1760029172259">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -160092,8 +160190,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
Code <i>führt aus</i>, delegiert, stellt sicher
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -160101,8 +160198,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
Solchen Code sieht man mit <i>gemischten Gefühlen</i> — er ist nicht das, was man gesucht hat, aber er legt einem nahe, ihn zu ignorieren, <i>ohne zu verstehen was er tut</i>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0bb97" COLOR="#690f14" CREATED="1760029205453" ID="ID_162581753" MODIFIED="1760031097023" TEXT="problematische Formen">
|
||||
<linktarget COLOR="#fd5447" DESTINATION="ID_162581753" ENDARROW="Default" ENDINCLINATION="-13;-89;" ID="Arrow_ID_971584165" SOURCE="ID_184966462" STARTARROW="None" STARTINCLINATION="122;12;"/>
|
||||
|
|
@ -160126,8 +160222,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1760030187157" ID="ID_1184582196" MODIFIED="1760030365670" TEXT="Code macht sich Standard-Verhalten zu Nutze">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -160137,8 +160232,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
In solchem Code findet man typischerweise nur eine endlose Folge von Abgrenzungen, die Verhalten unterdrücken, ablenken oder transformieren; das intendierte Verhalten <i>steht grade nicht im Code, </i>sondern bleibt übrig oder fällt an
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1760030372735" ID="ID_1528353123" MODIFIED="1760030388923" TEXT="Code wurde vom Einzelresultat rückwärts gedacht"/>
|
||||
<node CREATED="1760030805760" ID="ID_1898675367" MODIFIED="1760031044700" TEXT="Logik wird nur auf einem Zugangsweg ersichtlich">
|
||||
|
|
@ -160149,8 +160243,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
Hierzu zähle ich auch den in der Praxis sehr häufigen Fall weithin verteilter Entscheidungs-Kaskaden, deren Konsequenz nur sichtbar wird, wenn man in einer ganz bestimmten Weise durch die Codebasis navigiert; jedes Einzelstück, das man dabei zu fassen bekommt, ist für sich genommen nichtsagend. Eine ähnliche Situation kann aber auch bei hochgradig »algorithmischem« Code auftreten, der zwar ganz kompakt an einer Stelle steht, dessen eigentliche Relevanz sich aber nur erschließt, wenn man sein Verhaltensmuster entschlüsselt hat.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -160311,7 +160404,7 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
<linktarget COLOR="#8d266d" DESTINATION="ID_1661215590" ENDARROW="Default" ENDINCLINATION="-1400;-96;" ID="Arrow_ID_614837711" SOURCE="ID_1987056811" STARTARROW="None" STARTINCLINATION="-1631;60;"/>
|
||||
<node CREATED="1760045196809" ID="ID_1542233704" MODIFIED="1760045209507" TEXT="Events sind strukturiert und verknüpft"/>
|
||||
<node CREATED="1760045214431" ID="ID_1468489334" MODIFIED="1760045232329" TEXT="auch das Herausnehmen eines Events muß gepüft werden"/>
|
||||
<node CREATED="1760045251159" ID="ID_550330416" MODIFIED="1760045324835" TEXT="einfgeügte Elemente werden Teil eines Regel-Fakten-Netzwerks">
|
||||
<node CREATED="1760045251159" ID="ID_550330416" MODIFIED="1760286627966" TEXT="eingefügte Elemente werden Teil eines Regel-Fakten-Netzwerks">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -160333,9 +160426,40 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1760045491722" ID="ID_1854950019" MODIFIED="1760045502835" TEXT="man könnte es als Teil des Event-Logs aufzeichnen"/>
|
||||
<node CREATED="1760045503761" ID="ID_336239746" MODIFIED="1760045526698" TEXT="man könnte eine Sektion im Modell verwenden"/>
|
||||
<node CREATED="1760045527782" ID="ID_188911820" MODIFIED="1760045540752" TEXT="man könnte es in das Modell integrieren ⟹ in die Placements"/>
|
||||
<node CREATED="1760045491722" ID="ID_1854950019" MODIFIED="1760287094394" TEXT="man könnte es als Teil des Event-Logs aufzeichnen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Das muß auf jeden Fall sowiso passieren, sobald ein <i>Binding</i> in den Regeln dauerhaft und global sichtbar etabliert wird — was schon allein dadurch geschehen kann, daß man eine ganz bestimmte Lösung verwendet. Dieser Vermerk einer etablierten Zuordnung ist es am Ende dann auch, der bei späteren Umordnungen und UNDO erkannt und umgekehrt werden muß, was dann die Überprüfung aller Konsequenzen nach sich zieht
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1760291970729" ID="ID_1279149428" MODIFIED="1760292073525" TEXT="die Zuordnung ist aber nicht selbst das Event">
|
||||
<linktarget COLOR="#ff694a" DESTINATION="ID_1279149428" ENDARROW="Default" ENDINCLINATION="-3888;-258;" ID="Arrow_ID_1367334728" SOURCE="ID_1612624181" STARTARROW="None" STARTINCLINATION="-2727;124;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1760045503761" ID="ID_336239746" MODIFIED="1760287651194" TEXT="man könnte eine Sektion im Modell verwenden (Meta-Assets)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Die Regeln und Konfigurationsquellen müssen ohnehin dort repräsentiert sein (möglicherweise nur symbolisch); allerdings: alles, was sich hier niederschlägt, muß unter den Begriff einer Projektion passen. Ein weiteres Problem ergibt sich daraus, daß ja eine Verbindung aufgezeichnet werden soll zwischen einer Regelbasis, einem Binding (also einer Auswertung) und einem konkreten Element, dessen Wert dadurch beeinflußt ist — dazu müßte erst noch eine Referenz-Notation geschaffen werden (mutmaßlich auf Basis einer EntryID oder AssetID)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1760045527782" ID="ID_188911820" MODIFIED="1760287849426" TEXT="man könnte es in das Modell integrieren ⟹ in die Placements">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Diese Annotation hier zu speichern wirkt auf den ersten Blick etwas künstlich, ist aber durchaus möglich, da wir die Implementierung der Constraints in den Placements komplett unter unserer Kontrolle haben. Dadurch ergibt sich auch noch ein weiterer Vorteil: man könnte eine Detail-Einstellung markieren oder attributieren, ohne erst eine Pfad- oder Diff-Notation einführen zu müssen, denn die Marke wäre direkt in der Kette der Constraints, bereits an der richtigen Stelle...
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1737319142807" ID="ID_698251911" MODIFIED="1737319218171">
|
||||
|
|
@ -160667,6 +160791,13 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
<arrowlink COLOR="#f6e1c2" DESTINATION="ID_1193884706" ENDARROW="Default" ENDINCLINATION="-1219;87;" ID="Arrow_ID_1874016721" STARTARROW="None" STARTINCLINATION="-2320;315;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1760289729765" ID="ID_542201944" MODIFIED="1760290458951" TEXT="LoadClip Vertical Slice">
|
||||
<arrowlink COLOR="#584786" DESTINATION="ID_501149716" ENDARROW="Default" ENDINCLINATION="-1547;94;" ID="Arrow_ID_1734617256" STARTARROW="None" STARTINCLINATION="-915;99;"/>
|
||||
<arrowlink COLOR="#584786" DESTINATION="ID_353677371" ENDARROW="Default" ENDINCLINATION="-1547;94;" ID="Arrow_ID_1323221919" STARTARROW="None" STARTINCLINATION="-915;99;"/>
|
||||
<arrowlink COLOR="#584786" DESTINATION="ID_1994509660" ENDARROW="Default" ENDINCLINATION="-1547;94;" ID="Arrow_ID_272113141" STARTARROW="None" STARTINCLINATION="-915;99;"/>
|
||||
<arrowlink COLOR="#584786" DESTINATION="ID_1814100289" ENDARROW="Default" ENDINCLINATION="-1569;86;" ID="Arrow_ID_744418079" STARTARROW="None" STARTINCLINATION="-915;99;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1664059317203" ID="ID_995858352" MODIFIED="1679784026877" TEXT="#1221 Playback Vertical Slice">
|
||||
<icon BUILTIN="back"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1679783158745" HGAP="36" ID="ID_25937632" MODIFIED="1679783197261" TEXT="Definition" VSHIFT="11">
|
||||
|
|
@ -161952,6 +162083,22 @@ unsigned int ThreadIdAsInt = *static_cast<unsigned int*>(static_cast<vo
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1760292219756" ID="ID_1353193853" MODIFIED="1760292229846" TEXT="Playback-Vertical-Slice">
|
||||
<node COLOR="#338800" CREATED="1760292242655" ID="ID_1999083969" MODIFIED="1760292255527" TEXT="Grundlagen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1760292251396" ID="ID_1733978041" MODIFIED="1760292256543" TEXT="Aufbau">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1760292259390" ID="ID_1221747989" MODIFIED="1760292264742" TEXT="Integration treiben">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1760292268581" ID="ID_634625719" MODIFIED="1760292477862" TEXT="Buffer-Manager zustande bringen">
|
||||
<arrowlink COLOR="#ff4400" DESTINATION="ID_664146362" ENDARROW="Default" ENDINCLINATION="-1857;303;" ID="Arrow_ID_1425526052" STARTARROW="None" STARTINCLINATION="-1363;105;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1760292288690" ID="ID_693794400" MODIFIED="1760292296083" TEXT="Play-Connection"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1694378331399" ID="ID_281226841" MODIFIED="1694378333684" TEXT="Themen">
|
||||
|
|
|
|||
Loading…
Reference in a new issue