Why using a framework ? What is the scope of the proposed framework ? How to use it ? How not to use it ?
A framework is nothing more than a set of tools, sometimes with some rules to respect for their usage. It make life easier for developers by allowing them to take advantage of those tools, from a single platform. Advantages of using a software framework:- Assists in establishing better programming practices and fitting use of design patterns.
- Code is more secure.
- Duplicate and redundant code can be avoided.
- Helps consistent developing code with fewer bugs.
- Makes it easier to work on sophisticated technologies.
- One could create their software framework or contribute to open-source frameworks. Hence, there is a continuous improvement in the functionality.
- Several code segments and functionalities are pre-built and pre-tested. This makes applications more reliable.
- Testing and debugging the code is a lot easier and can be done even by developers who do not own the code.
- The time required to develop an application is reduced significantly.
Software frameworks are designed to be universal, and reusable to provide functionality as part of a larger software platform, this then facilitates the development of software applications, products, and solutions. Put simply, a software framework should serve the purpose of making it easy to create new software.
The proposed C++ framework comes with a ‘core library’ that provides:- Utility classes: Centralized commonly used algorithms
- Common interfaces (IStartable, IValue, etc…)
- Design patterns helpers (Listeners, MachineState, Dynamic Invokation, …etc…)
- Standard Types Wrappers (Ready to serialize or to be dynamically invoked)
- Python Scripting engine
- Reflexivity / Introspection
- Easy Serialization
- Threading management (Priority, Scheduling, Synchronization, Cyclic Tasks)
- Specific thread-safe objects model wrappers
This Core Library depends on boost (at least version 1.75 with following components: system serialization python thread chrono json).
The C++ version of the framework is not really intrusive, and lightweight. Mainly adding interfaces and maccros (header files) that can be overwritten or extracted at any time.
And two optional libraries:- LibLoader: Libraries runtime-linking (for Plugins systems)
- Sockets and Applicative Protocol management (For UD / TCP / TLS / WebSockets)
The Sockets libraries are based on ‘boost::asio’ and ‘botan’ (for TLS).