This page is a Draft, its content is not complete and might contain errors.
In Math.NET he term
yttrium architecture refers to the mathematical architecture (signals, ports, etc.). The topic of this page however is how this architecture was designed - the architecture of this architecture. That's why I named this page
meta architecture.
Motivation: Avoid Complexity & Cyclic Dependencies
Yttrium evolved heavily over time. Given the experimental nature of the project this is to be expected. Also expected is a high degree of complexity, as the topic of abstract mathematics is inherently complex. There are so many aspects which in effect all depend on each other, that the complexity and the cyclic dependencies in the framework soon increased dangerously. Therefore the primary motivation for this meta architecture is to break down complexity and tear cyclic dependencies apart.
Basic Ideas & Microkernel Architecture
- Contracts: The modules separate contracts and the actual implementation where appropriate; they're even split in different assemblies. A contract usually consists of a set of interfaces and abstract classes, and maybe some container structures, and e.g. exception and event argument types.
- No Inter-Implementation Dependencies: Implementations of such contracts (usually Services) never depend (have assembly dependencies) on other implementations. They only depend on a set of contracts, maybe some toolkit and of course the microkernel.