LUMIERA.clone/doc/devel/rfc/ProcBuilder.txt
Ichthyostega b556d2b770 clean-up: comb through the historical pages to fix markup errors
Some sections of the Lumiera website document meeting minutes,
discussion protocols and design proposals from the early days
of the project; these pages were initially authored in the
»Moin Moin Wiki« operated by Cehteh on pipapo.org at that time;
this wiki backed the first publications of the »Cinelerra-3«
initiative, which turned into the Lumiera project eventually.

Some years later, those pages were transliterated into Asciidoc
semi-automatically, resulting in a lot of broken markup and links.
This is a long standing maintenance problem problem plaguing the
Lumiera website, since those breakages cause a lot of warnings
and flood the logs of any linkchecker run.
2025-09-21 05:40:15 +02:00

79 lines
2.9 KiB
Text

Design Process: Builder
=======================
[options="autowidth"]
|====================================
|*State* | _Final_
|*Date* | _2008-03-06_
|*Proposed by* | Ichthyostega
|====================================
Builder within the Steam-Layer
------------------------------
One of the core ideas of the Steam-Layer (as being implemented since summer '07
by Ichthyo) is the use of the Builder-pattern to achieve a separation between
high-level view and low-level view.
Description
~~~~~~~~~~~
The Steam-Layer differentiates into a high-level view, which models the
properties of the problem domain (manipulating media objects), and a low-level
model, which is a network of render nodes and will be optimized for processing
efficiency.
In between sits the Builder, which is triggered on all important/relevant
changes to the high-level model.
The Builder inspects the current state of this high-level model and, driven by
the actual objects and their configuration, creates a corresponding
representation within the low-level model, which is then hot-swapped into the
renderer.
In the course of this building process, all necessary decisions are taken,
disabled features and impossible connections are detected and left out, and all
more elaborate or macro-like structures (e.g. meta clips) are broken down into
simple building blocks, which can be implemented 1:1 by render nodes in the
low-level model.
The configuration of the high-level model is deliberately very open; the
builder doesn't impose much limitations, rather he reflects the found
configuration down into the low-level model using generic rules.
Pros
^^^^
* Separation, decoupling
* Architectural aproach instead of just hacking away...
Cons
^^^^
* Increases the overall complexity
* More work to be done to get a minimal system implemented
Rationale
~~~~~~~~~
This design was chosen as a direct consequence of the problems encountered in
the Cinelerra-2 codebase.
* Separating this way allows us to take on different viewpoints on what is
``good'' and ``efficient''.
* In the low-level view simplicity and efficiency of computation is the main
criterion.
* Whereas in the high-level view a good modeling of the problem domain and
maximum flexibility is preferable.
* The high-level view is taken out of the critical code path, allowing for
advanced and even experimental technologies without endangering the whole
application's usability. In the low-level realm, _speed_ is measured in ms,
whereas in the high-level domain, speed is rather measured in 100ms.
* The separation creates distinct interfaces and allows people with very
different skill sets to work in parallel at the various levels of the App.
Conclusion
----------
This proposal reflects a distinct approach taken right from start.
Marked __`final'__ at the
link:{}/devel/meeting_summary/2008-10-10.html#_the_builder[October.2008 developer meeting]
''''
Back to link:/x/DesignProcess.html[Lumiera Design Process overview]