Note: This Architecture is based on the 12 Factor Principles https://12factor.net/ for SAAS and PAAS applications.
We need a horizontal (generic purpose) framework, which can be the base of our vertical framework. We’re looking for a full framework:
Examples: Angular, ReactJS
It provides tools out of the box, which are non domain specific or common across all products, for example logging, security, navigation (between pages and Modules), components, etc. These tools helps you focus on solving domain specific problems and avoid boilerplate coding.
It is essential to have a harmonized / standardized 3rd party library set. It makes possible to share code and can prevent code conflicts. The Framework’s responsibility is to define the standardized 3rd party library set, which common across domains.
3rd party libs should be handled via dependencies, they should not be part of the source code.
Module by itself is a final product, a bounded context (http://martinfowler.com/bliki/BoundedContext.html). A Module cannot be extended, augmented or changed, but another Module can be created that provides the desired augmented services or extensions.
A Module is always domain specific and a deployable unit. The recommendation is one Module is one package.
A user workflow typically involves N Modules. The Framework allows seamless navigation across Modules.
A software development kit (SDK) is a set of tools used for developing applications provided by hardware and software providers. SDKs are usually comprised of application programming interfaces (APIs), sample code, documentation, etc.
From a business perspective, the idea is that a tightly knit development community will serve as a competitive advantage in the marketplace. An example is Apple and the combination of the iPhone and the App Store™. The selection of applications for the iPhone provides a competitive advantage to Apple versus its competitors. In this sense, the device goes from being a commoditized piece of hardware to a platform that other companies need to plugin to. So while the term SDK has been around since the beginning of software, it can often serve as the starting point in an IT company’s business strategy.
Below are a few ways to acheive SDK
Enterprise Digital Software consists mainly of Forms, Lists and Dashboards. So by targeting to make these three major components to be rendered based on Configuration allows us to make the Code comply to CUDM (Customizable, Upgradable, Deployable and Migratable)
For each component (form, list or dashboard) we need the below
A tool which prescribes and executes the stages in the build pipeline. From another perspective, a build system is a set of steps which transform the source code into something deployable or shareable. It provides utilities to make the development faster and easier.
To automate all the manual tasks, enforce consistency, unify the output format and make the development faster/easier.
Coding conventions are a set of rules / guidelines for a specific programming language that recommend programming style, practices and methods for each aspect of a piece program written in this language. These conventions usually cover file organization, indentation, comments, declarations, statements, whitespace, naming conventions, programming practices, programming principles, programming rules of thumb, architectural best practices, etc. These are guidelines for software structural quality. Conventions should be formalized in a documented set of rules that an entire team or company follows.
The main goal is to reduce the overall cost of software maintenance, but there are many other reasons like:
It should cover the followings:
The goal is to have a highly optimized output for production.
The idea is that you can use any kind of programming language (ES5, ES6, TypeScript or whatever you want) for development, but when you share it via npm, you should produce an output which is conform with the requirements (see below). So before we publish a package to the npm repository, we need to pre-process the source code. This is the bare minimum and a must to be able to share code via npm.