Lecture
Framework (also written framework; an anglicism, a neologism from framework — skeleton, frame, structure) — a software platform that defines the structure of a software system; software that facilitates the development and integration of the various components of a large software project.
The word “frame” is also used, and some authors treat it as the primary term, in some cases without relying on the English equivalent at all. One can also speak of the frame-based approach as an approach to building programs, in which any program configuration is built from two parts:
In computer programming, a software framework is an abstraction in which software providing generic functionality can be selectively changed by additional, user-written code, thereby providing application-specific software. It provides a standard way to build and deploy applications, and is a universal, reusable software environment that provides particular functionality as part of a larger software platform to facilitate the development of software applications, products, and solutions. Software frameworks may include support programs, compilers, code libraries, toolkits, and application programming interfaces (APIs) that bring together all the various components enabling a project or system to be developed.
Frameworks have key distinguishing features that set them apart from ordinary libraries:
A “framework” differs from the concept of a library in that a library can be used in a software product simply as a set of subroutines of related functionality, without affecting the architecture of the software product or imposing any restrictions on it. Whereas a “framework” dictates the rules for building the application's architecture, setting a default behavior at the initial stage of development — a “frame”, which will need to be extended and modified according to the specified requirements. An example of a software framework is C.M.F. (Content Management Framework), and an example of a library is an email module.
Also, unlike a library, which combines a set of related functionality, — a “framework” can contain a large number of libraries covering different subject areas.
Another key difference between a “framework” and a library can be inversion of control: user code calls library functions (or classes) and regains control after the call. In a “framework”, user code can implement specific behavior that is embedded into the more general — “abstract” code of the framework. In this case, the “framework” calls the functions (classes) of the user code.
Software frameworks consist of frozen and hot spots ( frozen spots and hot spots). Frozen spots (Frozen spots) define the overall architecture of the software system, that is, its main components and the relationships between them. They remain unchanged (frozen) in any instance of the application infrastructure. Hot spots(Hot spots )represent the parts where programmers using the framework add their own code to add functionality specific to their own project.
In an object-oriented environment, a framework consists of abstract and concrete classes. Building such a structure consists of composing and creating subclasses of existing classes.
The required functionality can be implemented using the template method pattern, in which frozen spots are known as invariant methods, and hot spots are known as variants or hook methods. Invariant methods in the superclass provide the default behavior, while hook methods in each subclass provide customizable behavior.
When developing a specific software system with a software framework, developers use hot spots according to the specific needs and requirements of the system. Software frameworks are based on the Hollywood principle: “Don't call us, we'll call you”. This means that user-defined classes (for example, new subclasses) receive messages from predefined framework classes. Developers usually handle this by implementing abstract superclass methods.
I decided to combine these criteria, the main most popular frameworks of different classes, and their features into a single diagram, and here's what came out of it:

“No frameworks” — this is a degenerate case that suits any task and offers the greatest manageability and flexibility. Obviously, this way of developing enterprise applications is the slowest, since, in essence, you have to reinvent the wheel. This approach is good for creating narrowly specialized frameworks, which, in turn, increase development speed.
This is the most numerous class. All its representatives simplify development by raising the level of abstraction and providing a clear API. At the same time, each such framework is designed for its own narrow area. Tying together ORM, Middleware, UI, Messaging, and other frameworks is a non-trivial task. This approach has its own advantage — a pretty good balance between development speed and genuinely high flexibility.
This class makes it possible to speed up development at the project start-up stage. Essentially, code generators and aggregators simply build the structure of applications based on the narrowly specialized frameworks mentioned above. For example, JHipster generates a Spring-based application with a user interface built on Angular. However, at other stages, such frameworks no longer help much, or don't help at all.
This class is the next level of abstraction after narrowly specialized frameworks. The ready-made infrastructure offered by such frameworks makes it possible to build enterprise full-stack systems many times faster. For example, the CUBA Platform provides a ready-made architecture for building 3-layer applications and includes features that enterprise systems rarely do without: soft deletion, data-aware components, file storage, as well as high-level modules: authentication and authorization, data auditing, and so on. This class is perhaps best suited for developing systems such as ERP, business applications, or other custom software for the enterprise segment.
With these frameworks you don't control the codebase at all, and you can only write individual pieces of logic at given extension points. If you're not interested in any noticeable control over your solution in terms of performance, deployment, integrations, and so on — then this is the fastest way to build applications. However, be prepared for the fact that one day you won't be able to work around the architectural limitations of such frameworks.
all classes of frameworks and the types of tasks they handle best:
|
Class |
Typical use |
|
The “No frameworks” approach |
|
|
Narrowly specialized frameworks |
|
|
Code generators/Aggregators |
|
|
High-level full-stack frameworks |
|
|
Low/No Code frameworks |
|
choosing the best framework (or set of frameworks) for developing an application is the search for the optimal balance between the following criteria:
Software frameworks usually contain a significant amount of boilerplate and utility code to help bootstrap user applications, but are usually focused on specific problem areas, such as:
This is the frame of a software system (or subsystem). It may include: support programs, code libraries, a scripting language, and other software that facilitates the development and integration of different components of a large software project. Integration is usually achieved through the use of a single API.
Examples: web frameworks, such as the PHP frameworks Zend Framework and Symfony, or Django, written in Python.
One of the main advantages of using “frame-based” applications is the “standardness” of the application's structure. “Frames” became popular with the advent of graphical user interfaces, which tended to implement a standard structure for applications. Using them made it much easier to create tools for automatic creation of graphical interfaces, since the internal implementation structure of the application code became known in advance. To provide the frame, object-oriented programming techniques are typically used (for example, parts of the application can inherit from the framework's base classes).
One of the first commercial application frameworks was MacApp[en], written by Apple for “Macintosh”. Originally created using an extended (object-oriented) version of the “Object Pascal” language, it was later rewritten in “C++”. Other popular frames for “Macintosh” included:
To varying degrees, application frameworks are represented by “Cocoa” for Mac OS X, as well as free frameworks that exist as part of the Mozilla, OpenOffice.org, GNOME, and KDE projects.
Microsoft created a similar product for “Windows”, called Microsoft Foundation Classes (MFC). Microsoft's main software development product today is “.NET Framework”.
Cross-platform application frames (for the “Linux”, “Macintosh”, and “Windows” operating systems) include, for example, widget toolkit[en], wxWidgets, Qt, MyCoRe[de], or FOX toolkit.
An abstract concept of structure that is used in research to define possible ways of solving a problem or representing an idea.
A “framework” is defined as a set of concrete and abstract classes, as well as definitions of how they relate to one another. Concrete classes usually implement the mutual relationships between classes. Abstract classes represent extension points, where frames can be used or adapted.
Extension point — this is that “part” of the framework for which no implementation is given. Accordingly, a conceptual model frame consists of conceptual classes, while a software system frame consists of general-purpose programming language classes.
The process of creating a framework consists of selecting a subset of the problem's tasks and their implementations. During implementation, the common means of solving tasks are contained in concrete classes, while the variable means are moved out into extension points.
Bootstrap - this framework is incredibly popular and in demand; it was first introduced back in early 2011. Responsiveness (responsive layout) is its main advantage. Bootstrap makes it possible to build projects with an incredibly responsive, stylish design - the project will automatically adjust based on the screen size of the computer or mobile device of the user viewing the site. Its advantages include: a large number of styles, templates, and page-by-page design - this significantly simplifies building a website.
Bootstrap became so popular because of its huge number of advantages, and it has virtually no drawbacks. It's not just an HTML/CSS framework - Bootstrap also includes plugins and ready-made JS/Jquery styles. Knowledge of Bootstrap is often one of the mandatory requirements of employers.
Official page getbootstrap.com
Semantic UI - used for creating portable interfaces. This framework can be called fairly young, but it's worth noting its constant development. In it you can find a huge number of buttons and other elements needed for work — images, icons, labels.
Official page semantic-ui.com
Foundation - this framework is one of the popular ones in the front-end framework segment. The latest versions feature improved functionality for modern mobile devices. Thanks to its semantic approach, it's possible to use SCSS and write cleaner code in HTML. This framework is ideal for situations where fast prototyping is needed.
Official page foundation.zurb.com
Pure by Yahoo! - this framework has several small CSS modules that work well for any modern project. The framework's name characterizes its main feature - nothing extra, only what's necessary, an unencumbered program frame that's perfect for building a website.
Official page purecss.io
Uikit - this framework stands out for its modular, lightweight structure. There are several features that let it stand out among modern frameworks. One is markdown - the ability to preview a site page in real time. Also worth noting is syntax highlighting for HTML.
Official page getuikit.com
Yii - a fairly "mature" framework that continues to be updated today. It features convenient functionality - caching, high performance, full error handling, the ability to migrate existing databases, the use of jQuery, and more. The Yii framework stands out for its simplicity - you can quickly learn its basics, and there are no difficulties in working with and using its core functionality. This PHP framework is often recommended to people taking their first steps in understanding PHP programming.
Official page yiiframework.com
CodeIgniter - another "mature" framework that appeared in early 2006. That's when its public release took place. Among the main advantages of this framework:
- Good documentation;
- Small footprint and fast installation;
- Ease of use.
Many use CodeIgniter as a base for learning - its simplicity is indeed considered its most significant advantage. New versions keep appearing, each featuring a large number of innovations and bug fixes.
Official page codeigniter.com
Symfony - an incredibly stable, powerful framework that experts recommend using for building large projects. Substantial functionality and flexible configuration - the popularity of this framework is due to its advantages. There's a huge number of useful, reusable components that can be used to build a large website. These include templates, form configuration, and security.
Official page symfony.com
Laravel - a frequent leader in various surveys and rankings dedicated to php frameworks. The project is truly promising and has earned recognition from fairly experienced specialists. The framework is easy to learn and is an ideal choice for small as well as medium-complexity projects. It's well suited for writing the required code quickly and conveniently.
Official page laravel.com
Phalcon PHP - stands out for its open source code (C, C++, PHP programming languages) and support for practically all modern OSs. This framework's performance is at a high level - this is confirmed by numerous specialized benchmarks, and, as a result, by its popularity. It's possible to use it on your own server.
Official page phalconphp.com
Flask - features a minimal amount of core functionality, but is extensible. You can add the necessary functionality at any time, taking into account the specifics of a particular project. Thanks to a large number of extensions, you won't have any trouble implementing your own idea. Suitable for beginner programmers as a first introduction to python frameworks.
Official page flask.pocoo.org
Web2py - based on the concept of RAD (rapid application development) – rapid application development. This allows programmers to quickly build quality products without having to spend too much effort or time. The developers tried to make the framework as simple and efficient as possible. Fully open source code makes it possible to build any dynamic websites in the Python language. The framework stands out for its extensive functionality and performance.
Official page web2py.com
Django - the framework is very popular overall, and it leads its segment thanks to its simplicity and functionality. First, you don't need deep knowledge of the Python programming language to get started. And thanks to the DRY (Don`t repeat yourself) principle, writing code is simplified - you won't have to re-enter lines that have already been used, the framework will do it for you, while the code remains concise and efficient. Template inheritance, as well as a standard structure, are the main advantages of this python framework. There's also an administration system – CMS Django.
Official page djangoproject.com
TurboGears - a "long-timer" in its segment, this framework's structure is built from WSGI — components (for example, Pylons, CherryPy) that make it possible to build any modern projects. The framework is genuinely powerful and features decent functionality. There's support for different databases, the ability to scale, and virtually no drawbacks.
Official page turbogears.org
Tornado - it has one main feature that affects its popularity - solving the problem of 10,000 connections. Thanks to the server's features, this framework can handle thousands of simultaneous connections beautifully.
Official page tornadoweb.org/en/stable
Comments