Domain Model

Our application’s domain model is complex and multifaceted. It involves modeling dynamic objects in a way that is consistent and structured. We have implemented a structural type system that allows us to define and recognize the various types and relationships provided to the system.

One of the challenges we faced in building the model was the need to provide a flexible system that could accommodate the wide range of scenarios our users may encounter. To address this, we implemented the anything pattern, as described in the Type section.

Another key challenge was the need to provide an extension API that allows users to customize and add to the model as needed. This required us to carefully balance the need for structure and consistency with the need for flexibility and extensibility.

Ultimately, we believe that we have developed a domain model that offers a powerful and flexible foundation for our application. We hope that our documentation will help users understand and make the most of this complex but powerful system.

../../_images/d4cf6deaf0120965f904010bcb3f9fe52d0f127a1e5a8e4c711d785dd8623cae.svg

Extensions

Extensions are a core part of Black Fennec but conceptually decoupled from the domain model through the extension api. Extensions are implemented as a set of classes which are loaded into the domain model at runtime. The extension api is a set of interfaces which extension can use to register functionality with Black Fennec.

As references for a working model, the following diagrams show the structure of the core and base extensions.

Core

The core extension provides a UI for the structure, some actions, as well as a presenter.

../../_images/5ea3119e599a95b24511feff77a917389ecd63276080beeda5e9b005a7bf5a38.svg

Base

The bae extension introduces novel types such as Image and Url as well as the associated views.

../../_images/8bd446f0a91478d566a1296b8278f0b6d254f5305929e3a555898b525547c77b.svg