An implementation of a simple working-at-the-edge architecture is intended as a reference for a broader implementation. As a reference implementation, this project/repository does include 'extra file', which are not expected to be found in a production implementation. For example, IDE and environment files are included to demonstrate changes to the development workflow and environment.
As security and integration with external providers is beyond the scope of this reference, the included env files can be considered free of sensitive information.
We invested work into this reference implementation, to flesh out optimal solutions of the various challenged of implementing a multi-platform offline client, that does a large amount of data processing on different client devices and operating systems.
The essence of this reference implementation
- Demonstrate dataflow from user interface to persistence, which is just a stub of a datastore.
- Demonstrate dependency management and injection.
- Demonstrate the interaction between the user interactions and the edge worker.
- Demonstrate the architectures portability cross various devices.
- Demonstrate testing approaches.
- Developer tooling and workflow.
- Demonstrate the architecture ability to exist in a automated deployment pipeline.
Those things/challenges that we have explicit excluded from this reference implementation for the sake of brevity
- Beyond data bind to the GUI Widget and dependency management, issues of animations and other UI/UX are non-goals.
- Persistence and serialization optimization are non-goals.
Those things/challenges which we have assumed a generally accepted solutions shall deliver, hence is not included in this reference implementation.
- Mono-repo for all code. ~ Melos
- All libraries declared in the pubspec.yaml are the minimum required to deliver the reference implementation.
- Environment config secrets are handled via a service like Doppler or similar, pushed into variables at build time.
- IDE environment is IntelliJ.
- Gui Localization is handled in the standard flutter way ~ il18
- Data Model will be handled using DDD Principles.
Given the audience of this work are experienced with the applied technology we have opted to leverage code comments and a clear terse code style instead of a collection of verbose markdown down files. After setting up the documentation generator you can build the documentation by running the commands below from the root of the project.
Set it up once if you have not already done so.
dart pub global activate dartdoc
dart pub global activate dhttpd
Build the doc and server it locally for your own consumption.
dart doc .
dhttpd --path doc/api