Kensio Software Blog »

General feature set for a fully-fledged application framework

Hugh Grigg | Kensio Software | Sunday 15 Sep 2024

Entities

Entity modelling, including entity relations.

Aggregate

Group of entities that can be interacted with as a single object.

Commands

Decoupled command objects that perform change operations on entities and aggregates.

Queries

Decoupled query objects that fetch single entities and collections of entities.

Validation

Transitions / entity lifecycles

Ability to move entities through stages in a lifecycle. For example, draft products that can be published as products, or baskets that become orders via a checkout process. This makes validation more flexible by allowing a gradual assembly of a valid entity via intermediate stages.

Interfaces

Decoupled interfaces that allow interaction with the application. Any command or query can be issued via any supported interface.

HTTP

HTTP APIs, such as REST, OpenAPI, GraphQL.

Local CLI

Heavy command line interface that runs application code locally to issue commands and queries.

Network CLI

Light command line interface that issues commands and queries over the network to an API.

Web

Web user interface that issues commands and queries over the network to an API. Could be purely HTML based, or use a web framework such as React or htmx.

SDK

Abstract interface in a programming language for use by other developers to conveniently issue commands and queries over the network to an API.

Mobile / iOS / Android

Mobile application user interfaces that issue commands and queries over the network to an API.

Desktop

Desktop application user interface that issues commands and queries over the network to an API.

Slack

Slack chat integration built using the Slack SDK to allow issuing commands and queries via intermediate event handlers on the application side.

Events

Tasks

Authentication

Authorization / Permissions / IAM

Notifications

Inbound web-hooks

Convenience for setting up inbound web-hook endpoints for other systems to call into and trigger events and audit trails.

Subscriptions

Allow clients to subscribe to updates via websocket.

Entity subscription

Subscribe to changes to a specific individual entity or aggregate.

Series subscription

Receive incremental updates to a series, allowing chat applications and live update feeds.

Scheduling

Batch processing

Infrastructure

Drivers

Deployments

Logging

Monitoring, alerting

Migrations

Auditing

Introspection

Tests

Assistance with application test at different levels.

Unit

Tests for self-contained individual units such as classes and functions that don’t have any dependencies outside of the constructor or function arguments.

Process

Tests that run in a single OS process, with any external dependency either replaced with an in-process driver or mocked out with tools such as httpx-mock and moto. These are highly effective for debugging business logic, but will miss issues in the integration between real resources.

Integration

Tests that run entirely on the local OS, with services like databases running in Docker containers, and third-party APIs either mocked out with tools such as httpx-mock or as dummy implementations running in Docker containers. The application under test runs in the same process as the tests to allow debugging during integration tests.

Deployed / smoke

Tests that run against the application in deployed infrastructure such as AWS. These are few in number and aim for high-level sanity checks or smoke tests.

Environments

Runtime environment awareness which lets the application behave differently in different environments. Drivers can be specified per environment, for example the local development environment might use a different queue driver than the production deployment environment.

Local development

Feature flags

Configuration / settings

Demos

Assistance for demoing features, for example a prompted command-line script that takes the demo presenter through a particular use-case.

Documentation

Assistance for documenting the application, for example by producing OpenAPI specifications.

Third-party interfaces

Support for modelling third-party APIs, which can facilitate test implementations and libraries.

Export

Ability to bulk export entities and aggregates in formats such as CSV and JSON.

Import

Ability to bulk import entities and aggregates from formats such as CSV and JSON. Can use tasks that handle the import asynchronously and report granular issues with individual rows.

Synchronisation

Two-way synchronisation with another system, so that updates flow in both directions. For example, stock counts can be updated both to and from a third-party sales system such as Amazon or Etsy.