under construction, note docs are extensive but the product has a very small codebase that subscribes to the KISS principle.
Build Orders
The templates describe components for the IOC to build "FinPlusViews" and "FinPlusServices", below are example of build orders re different usecases.
_Note FinPlusService can connect to other services via FinPlusConnectService distributed solutions and services can be shared. _
IOC and Queryable Templates
IOC and template formats have changed to a less naive solution which incorporates constructor/method param solving, assembly ref re FunctionName and assembly version check.
Dependency Injection Code
Client Templates
Service Templates
Client/service Templates are not configs, query strings passed to Templates form different configs. Component Templates are consumed by the IOC to form services/clients from framework libraries of component assemblies.
Note potential for massive component reuse to reduce client/service development cost/time to minimal re new components to add business logic, once framework components have reached saturation. Large reuse of small code base will provide an industrialised solution (less code less bugs).
Real-time Observability
Components connect, join, build on and share models real-time.
_Note we have a component that can be dropped between component models through minor template changes to add throttling (far simpler than RX). _
Configurable Architecture
Templates can be altered to form different architectures without code changes. Management make descisions on architecture re use-case and hardware, architecture can be altered as use-case evolves without breaking code.
Dependency Injection
Depending on component docking can be via constructor, call for instance, method IOC solves.
States, commands, templates are in a component format re our kvp Universal Model.
Note Dock via method appears logical for UI components and constructor IOC for service components, you can write components to use either its possible we might deprecate Dock via method this is under consideration.
Template Assembly Control
IOC checks assembley and versions from templates.
<?xml version="1.0" encoding="utf-8" ?>
<root>
<current>
<VersionControl>
<Item Name="Id" Value="VersionControl" />
<Item Name="FunctionName" Value="VersionControl" />
<Item Name="Environment" Value="Dev" />
<Item Name="Assemblies" Value="{{FinPlusComponents,1.0.0.1}}" />
</VersionControl>
<Delta1bpOpen>
<Item Name="Id" Value="Delta1bpOpen" />
<Item Name="FunctionName" Value="FinPlusComponents.FinPlusLink" />
Template Readabilty
Ability to layout templates horizontal, vertical, nested or mix of allows the user to make component templates readable re users preference
Patterns.
Horizontal, ideal for trivial components.
<MenuItem Id="ContextMenuEdit" FunctionName="FinPlusWPFControls.FinPlusMenuItem" Header="Edit Ctrl+_E" Icon="SNotes" Action="Edit" Params="" />
<MenuItem Id="ContextMenuClone" FunctionName="FinPlusWPFControls.FinPlusMenuItem" Header="Clone Ctrl+_N" Icon="SNew" Action="Clone" Params="" />
<MenuItem Id="ContextMenuCopy" FunctionName="FinPlusWPFControls.FinPlusMenuItem" Header="Copy Ctrl+_C" Icon="SCopy" Action="Copy" Params="" />
Vertical, ideal for complex/major components
<GridBooks>
<Item Name="Id" Value="GridBooks" />
<Item Name="FunctionName" Value="FinPlusWPFControls.FinPlusGroupGrid" />
<Item Name="ColTypes" Value="{{SelectLink,{Book,Desk,Department,Location}}}" />
<Item Name="ColIsEnabled" Value="{Book,Desk,Department,Location}" />
<Item Name="ColLinks" Value="" />
<Item Name="ColFormats" Value="{{LongDateTime,{TimeStamp}}}" />
<Item Name="MakeRowVirtual" Value="True" />
<Item Name="MakeColVirtual" Value="False" />
<Item Name="Dock" Value="{ColSelector,DataBooks,FiltertrayBooks,ContextMenu}" />
</GridBooks>
Nested, reflecting relationships.
<GridBooks>
<Item Name="Id" Value="GridBooks" />
<Item Name="FunctionName" Value="FinPlusWPFControls.FinPlusGroupGrid" />
<Item Name="ColTypes" Value="{{SelectLink,{Book,Desk,Department,Location}}}" />
<Item Name="ColIsEnabled" Value="{Book,Desk,Department,Location}" />
<Item Name="ColLinks" Value="" />
<Item Name="ColFormats" Value="{{LongDateTime,{TimeStamp}}}" />
<Item Name="MakeRowVirtual" Value="True" />
<Item Name="MakeColVirtual" Value="False" />
</Dock>
<ColSelector Id="ColSelector" FunctionName="FinPlusWPFControls.FinPlusColSelectBar" />
<DataBooks>
<Item Name="Id" Value="DataBooks" />
<Item Name="FunctionName" Value="FinPlusWPFControls.FinPlusconnectService" />
<Item Name="ServiceName" Value="Books" />
<Item Name="ServiceType" Value="Query" />
<Item Name="Parms" Value="[group],Structure;[type],Select;[where],Name='FunctionName' And Value='Book'" />
<Item Name="KeyFormat" Value=""/>
<Item Name="IsTransposed" Value="True" />
</DataBooks>
<FiltertrayBooks Id="FiltertrayBooks" FunctionName="FinPlusWPFControls.FinPlusFilterbarTray" />
<ContextMenu Id="ContextMenu" FunctionName="FinPlusWPFControls.FinPlusContextMenu" Dock="{ContextMenuEdit,ContextMenuClone,ContextMenuCopy,ContextMenuPrint}" />
</Dock>
</GridBooks>
Note this is just Xml parsing all layouts or mix of get translated to collections of Function re universal model. Templates can be add to database re Universal Model which will include timestamps and change user re auditability of IOC together with the ability to query templates AsOf (query driven version control).