@cs/mva-framework

MVAFramework

README

There is robust documentation on VI block diagrams, so please browse and read the source if you want to understand how and why it works.

To learn how to use it, install the framework and start with the examples at mva-framework-examples (a git repo next to this one).

This repo holds an open-source extension to the LabVIEW Actor Framework and includes the following features:

  • Separation of Concerns design pattern (Model-View-ViewModel, in the author's opinion -- See https://blogs.msdn.microsoft.com/dphill/2009/01/31/the-viewmodel-pattern/)
  • Mediated data bus with implicit type safety (Subscribers request data by type)
  • Viewable class that allows nesting, launching, and event handling goodness
  • API for publish and subscribe to transport data with low coupling
  • Transport abstraction to allow painless interaction with non-Actor actors (i.e. actors that are not built on the LabVIEW Actor Framework)
  • Policy-based subscriptions to decouple behavior of publishers and subscribers ("I want 'x' data of type DBL with these conditions..." --> details abstracted from Publisher and Mediator)

How do I get set up?

Framework

  • Install the framework and its dependencies using VIPM (or GPM, coming soon)
  • Framework VIP and VIPC (all dependencies) located under _VIPackage folder

Examples

Dependencies (Only if you care)

  • All unpublished dependencies are also included in VI Packages in the repo ../mva-dependencies (parallel to this repo). Install them through VI Package Manager.
  • If you want to run the framework tests, you will also need to install JKI's VI Tester (published through the LV Tools Network)
  • Source code for dependencies is also open-sourced and located in the public project "Composed Systems Libraries"
  • You DO NOT need to pull the source code of the dependencies to use or edit the framework--just install and use the packages.

Contribution guidelines

  • Reasonable rigor must be applied to framework testing. (Some of those tests might wander into the strange territory of performance testing/benchmarking, but do so out of necessity.)
  • Please contact me if you want to contribute.
  • All code must adhere to SOLID design principles (or die trying).

Who do I talk to?

  • Ethan Stern | Composed Systems, LLC
  • ethan.stern@composed.io

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

Changed

Deprecated

Removed

Fixed

Security

[2.1.2] - 2019-05-10

(2.1.1 was an errant publication with an inaccurate Changelog version and date. Source is identical)

Changed

  • Minor in-placeness optimization to MediatorBusMonitor

Removed

  • Deprecated (and disabled) Observe Data method from concrete MediatorBusMonitor

Fixed

  • Stale dependency links in obsolete code and unit tests

[2.1.0] - 2019-05-02

Changed

  • Framework logging now uses explicit log reference (now local, was global)

Added

  • Set Minimum Panel Size message to IViewable
  • In-placeness optimization of subscription policy

[2.0.0] - 2019-03-21

Added

  • Debug logging (new dependency on @cs/event-logger)
  • Project flag to conditionally remove all logging (REMOVE_DEBUG_LOGGING)

Changed

  • Moved location of applicaiton template on disk so it installs with G Package

Removed

  • Deprecated framework accessors
  • ApplicationStyle injection (removed from framework API)

[1.9.1] - 2019-02-14

Version Note

All prior GPM versions are incomplete, badly linked, or missing dependencies

Changed

  • Replaced CurrentValueTable dependency (VIP) with malleable LookupTable (G Package)
  • Moved all remaining tests out of Source folder
  • Migrated from VI Package to G Package
  • Relinked dependencies to G Packages

Removed

  • TimedAverageBuffer and its associated SubscriptionPolicy (which no one used)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.