SlideShare a Scribd company logo
April 23th, 2020 - Integrated Computer Solutions, Inc.
Ryan Hampton - rhampton@ics.com
Separating UI from Business Logic
Software Development Best Practices
Today's Agenda
● About ICS
● Principle of the Separation of Concerns
● Key benefits from application separation
● Qt applications and UI / Backend separation
● ICS's architectural approach with GreenHouse
● GreenHouse testing and simulation
● Summary
HQ in Boston, offices in Sunnyvale and Ottawa
Delivering 50+ projects each year for global brands
About ICS...
Founded in 1987, currently 120 employees
We offer...
● UX design services
● Custom software engineering
for embedded devices
● Platform and board support
● Software modules
Lessons Learned
● Focus on the UX early
● Use an architecture that separates skills
● Reuse as much software as possible
● Simulate and test often
● Iterate and show progress to stakeholders often
500+ successful cutting edge projects on a short timeframe
Principle of the Separation of Concerns
Divide a computer program into sections that each
address a separate and distinct concern of the
application
● Fundamental Principle behind application
separation
● Has been taught and practiced since Edsger W.
Dijkstra used it in a paper in 1974
● GUI applications have a clear separation in UI
vs Backend code
● Traditional web architecture is classic example
Key Benefits from Application Separation
The necessity for a modular application grows
along with the size and complexity
● Enables parallel development
● Enforces modularity
● Enhances testability
● Accelerates development time
● Reduces "brain burden"
Qt Applications and UI / Backend Separation
● Qt developers tend to focus more on classes/object trees (generalization)
○ The architecture is the whole forest
● Break down application in terms of layers with well defined interfaces
○ Promotes high cohesion and loose coupling (good)
● A layer could be a module within an executable, a separate process in a
system, or even a physically separate system
○ One can ship multiple UIs with the same business logic backend or
allow the backend to be swapped out for a testing harness
● This matches up closely to the classic Qt application model…
○ Separate the UI code from the app logic code, by implementing the
former with QML and JavaScript and the latter with C++
Qt Applications and UI / Backend Separation
● Qt Quick provides four main ways to integrate C++ and QML.
○ Each has its own place and purpose.
● Subclassing QQuickItem: QQuickItem allows you to write your own visual
and non-visual QML items using C++.
● Registering C++ types with QML: C++ classes can be registered with the
QML type system, allowing them to be instantiated as QML types.
● Registering Context Properties / QML Singleton: QObjects can be
registered with the QML context, allowing their properties to be directly
accessed.
● Accessing QML objects through the QML object tree: All QML objects
reside in a tree hierarchy and can be accessed via the root of the tree.
Qt Applications and UI / Backend Separation
Note: Qt documentation explains more in depth: https://doc.qt.io/qt-5/qtqml-cppintegration-overview.html
Note: Checkout the Model-View webinar & blog series by Chris Probst and I
Qt Applications and UI / Backend Separation
Mp3ListModel mp3ListModel(downloadDirUrl);
engine.rootContext()->setContextProperty("mp3ListModel", &mp3ListModel);
qmlRegisterUncreatableType<Mp3ListModel>("DownloadManager", 1, 0, "Mp3ListModel",
"Mp3ListModel should not be created in QML");
Code Time!
class Mp3ListModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit Mp3ListModel(QUrl downloadDir, QObject *parent = nullptr);
// QAbstractListModel virtual methods
...
};
Figma UI & UX Design GreenHouse Development Desired Application
• Reduces time to generate assets
• Easy handoff from UX designers
• Or, design directly in GreenHouse
• Import Sketch, Photoshop, etc
• Platform agnostic Qt/QML code
• Enforces layered architecture
• Reusable, testable, simulatable code
• RPC support for remote backends and
simulations
• Import assets into GreenHouse
• Easily interface and bind data
• Add custom QML components
• Integrate unique backends
(Websockets, 0MQ, Mqtt, etc.)
GREENHOUSE: THREE STEP APPROACH
UX-FIRST APP DEVELOPMENT
ICS's Architectural Approach with GreenHouse
● Produces a full layered / service-based architecture
● Allows for easy custom code injection into backend and/or simulator
● Provides testable interfaces between each layer
● Connects to specific application functionality in the backend through
services (plugins)
● Permits remote execution of backend and
swappable UI technology
● Supports multiple communication APIs
Key Question: How does GreenHouse support application separation?
The GreenHouse Architecture
GreenHouse Testing and Simulation
● System / "black box" testing
○ Implement complete behavior of complex systems
in the simulator for testing and development
○ Test harness GUI for data / application state
○ Fully scriptable (JavaScript)
○ Record / playback
● Unit test coverage (googletest)
○ Generates unit tests for backend interfaces
○ Generates stubs for implementations
● Automated regression testing with Commander
Key Question: How does GreenHouse support testing and simulation?
GreenHouse Architecture Demo
Summary
● Separation of concerns is critical for testability, parallel
development, development speed, and reducing "brain burden"
● GUI applications have a clear separation in UI vs Backend code
● Qt facilitates application separation with QML and C++ separation
● GreenHouse take architectural separation to the extreme with a
service-based architecture.
● GreenHouse code facilitates testing between each interface
QUESTIONS?
Application Separation is
a Software Best Practice
Key Enforcer
Resources and Further Reading
● https://www.ics.com/blog/heres-why-you-should-separate-ui-business-logic-your-application
● https://www.ics.com/webinar-demand-introducing-greenhouse
● https://www.ics.com/greenhouse
● https://www.ics.com/blog/greenhouse-ics-helps-software-engineers-turn-ux-reality
● https://www.ics.com/blog/exploring-model-view-design-qt-quick
● https://www.ics.com/blog/avoid-pitfalls-when-developing-qt-model-view-delegate-project
● https://www.ics.com/blog/multilayered-architecture-qt-quick
● https://felgo.com/doc/apps-howto-model-view-separation/
● https://github.com/google/googletest
● https://doc.qt.io/qt-5/qtquick-bestpractices.html

More Related Content

What's hot (20)

PPTX
6-Python-Recursion PPT.pptx
Venkateswara Babu Ravipati
 
PPTX
C sharp
sanjay joshi
 
PDF
QThreads: Are You Using Them Wrong?
ICS
 
PDF
Basics of Model/View Qt programming
ICS
 
PDF
Qt programming-using-cpp
Emertxe Information Technologies Pvt Ltd
 
PDF
Java 8 Workshop
Mario Fusco
 
PPTX
Introduction to kotlin and OOP in Kotlin
vriddhigupta
 
PDF
In-Depth Model/View with QML
ICS
 
PPTX
Java 8 Lambda and Streams
Venkata Naga Ravi
 
PPT
Oops in Java
malathip12
 
PDF
Lessons Learned from Building 100+ C++/Qt/QML Devices
ICS
 
PPTX
Lecture_7-Encapsulation in Java.pptx
ShahinAhmed49
 
PPSX
Introduction to java
Ajay Sharma
 
PPTX
ASP.NET Web API
habib_786
 
PPTX
Core java
Ravi varma
 
PDF
Best Practices in Qt Quick/QML - Part IV
ICS
 
PDF
Qt multi threads
Ynon Perek
 
PDF
Angular - Chapter 2 - TypeScript Programming
WebStackAcademy
 
PPTX
Clean Code II - Dependency Injection
Theo Jungeblut
 
PDF
Best Practices in Qt Quick/QML - Part III
ICS
 
6-Python-Recursion PPT.pptx
Venkateswara Babu Ravipati
 
C sharp
sanjay joshi
 
QThreads: Are You Using Them Wrong?
ICS
 
Basics of Model/View Qt programming
ICS
 
Java 8 Workshop
Mario Fusco
 
Introduction to kotlin and OOP in Kotlin
vriddhigupta
 
In-Depth Model/View with QML
ICS
 
Java 8 Lambda and Streams
Venkata Naga Ravi
 
Oops in Java
malathip12
 
Lessons Learned from Building 100+ C++/Qt/QML Devices
ICS
 
Lecture_7-Encapsulation in Java.pptx
ShahinAhmed49
 
Introduction to java
Ajay Sharma
 
ASP.NET Web API
habib_786
 
Core java
Ravi varma
 
Best Practices in Qt Quick/QML - Part IV
ICS
 
Qt multi threads
Ynon Perek
 
Angular - Chapter 2 - TypeScript Programming
WebStackAcademy
 
Clean Code II - Dependency Injection
Theo Jungeblut
 
Best Practices in Qt Quick/QML - Part III
ICS
 

Similar to Software Development Best Practices: Separating UI from Business Logic (20)

PDF
Introducing GreenHouse
ICS
 
PDF
The fundamental problems of GUI applications and why people choose React
Oliver N
 
PDF
Serving QML applications over the network
Jeremy Lainé
 
PPTX
Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010
CybercomChannel
 
PPTX
BCA -6th sem Project PPT The project name is dental pro
Rahul254237
 
PDF
Qt Developer Days 2009 Keynote - Portable UIs
account inactive
 
PDF
Building a full-stack app with Golang and Google Cloud Platform in one week
Dr. Felix Raab
 
PDF
Accelerating Development of a Safety-Critical Cobot Welding System with Qt/QM...
ICS
 
PPTX
Rapid Application Development with MEAN Stack
Avinash Kaza
 
PDF
[Webinar] 10 Keys to Ensuring Success for Your Next Qt Project
ICS
 
PPTX
Intro to gui, cross platform and qt
Muhammad Sabry
 
PDF
Qt Technology Overview for: MedAcuity
Qt
 
PDF
Qt Core UI, Live Forum
Qt
 
PDF
Epam mobile meetup 2014 10-15 qt cross-platform solution for mobile development
Ivan Marinov
 
PPTX
Developing Highly Instrumented Applications with Minimal Effort
Tim Hobson
 
PDF
LAP II - Lezione 01 Introduzione al corso
University of Catania
 
PPTX
Cream Basic Presentation Template (2).pptx
bhargavistoitech
 
PPTX
Cream Basic Presentation Template (2).pptx
bhargavistoitech
 
PPTX
software training institute in hyderabad
krishnastoitech1232
 
PPTX
Introduction to Qt
Puja Pramudya
 
Introducing GreenHouse
ICS
 
The fundamental problems of GUI applications and why people choose React
Oliver N
 
Serving QML applications over the network
Jeremy Lainé
 
Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010
CybercomChannel
 
BCA -6th sem Project PPT The project name is dental pro
Rahul254237
 
Qt Developer Days 2009 Keynote - Portable UIs
account inactive
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Dr. Felix Raab
 
Accelerating Development of a Safety-Critical Cobot Welding System with Qt/QM...
ICS
 
Rapid Application Development with MEAN Stack
Avinash Kaza
 
[Webinar] 10 Keys to Ensuring Success for Your Next Qt Project
ICS
 
Intro to gui, cross platform and qt
Muhammad Sabry
 
Qt Technology Overview for: MedAcuity
Qt
 
Qt Core UI, Live Forum
Qt
 
Epam mobile meetup 2014 10-15 qt cross-platform solution for mobile development
Ivan Marinov
 
Developing Highly Instrumented Applications with Minimal Effort
Tim Hobson
 
LAP II - Lezione 01 Introduzione al corso
University of Catania
 
Cream Basic Presentation Template (2).pptx
bhargavistoitech
 
Cream Basic Presentation Template (2).pptx
bhargavistoitech
 
software training institute in hyderabad
krishnastoitech1232
 
Introduction to Qt
Puja Pramudya
 
Ad

More from ICS (20)

PDF
Porting Qt 5 QML Modules to Qt 6 Webinar
ICS
 
PDF
Medical Device Cybersecurity Threat & Risk Scoring
ICS
 
PDF
Exploring Wayland: A Modern Display Server for the Future
ICS
 
PDF
Threat Modeling & Risk Assessment Webinar: A Step-by-Step Example
ICS
 
PDF
8 Mandatory Security Control Categories for Successful Submissions
ICS
 
PDF
Future-Proofing Embedded Device Capabilities with the Qt 6 Plugin Mechanism.pdf
ICS
 
PDF
Choosing an Embedded GUI: Comparative Analysis of UI Frameworks
ICS
 
PDF
Medical Device Cyber Testing to Meet FDA Requirements
ICS
 
PDF
Threat Modeling and Risk Assessment Webinar.pdf
ICS
 
PDF
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
ICS
 
PDF
Webinar On-Demand: Using Flutter for Embedded
ICS
 
PDF
A Deep Dive into Secure Product Development Frameworks.pdf
ICS
 
PDF
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
ICS
 
PDF
Practical Advice for FDA’s 510(k) Requirements.pdf
ICS
 
PDF
Overcoming CMake Configuration Issues Webinar
ICS
 
PDF
Enhancing Quality and Test in Medical Device Design - Part 2.pdf
ICS
 
PDF
Designing and Managing IoT Devices for Rapid Deployment - Webinar.pdf
ICS
 
PDF
Quality and Test in Medical Device Design - Part 1.pdf
ICS
 
PDF
Creating Digital Twins Using Rapid Development Techniques.pdf
ICS
 
PDF
Secure Your Medical Devices From the Ground Up
ICS
 
Porting Qt 5 QML Modules to Qt 6 Webinar
ICS
 
Medical Device Cybersecurity Threat & Risk Scoring
ICS
 
Exploring Wayland: A Modern Display Server for the Future
ICS
 
Threat Modeling & Risk Assessment Webinar: A Step-by-Step Example
ICS
 
8 Mandatory Security Control Categories for Successful Submissions
ICS
 
Future-Proofing Embedded Device Capabilities with the Qt 6 Plugin Mechanism.pdf
ICS
 
Choosing an Embedded GUI: Comparative Analysis of UI Frameworks
ICS
 
Medical Device Cyber Testing to Meet FDA Requirements
ICS
 
Threat Modeling and Risk Assessment Webinar.pdf
ICS
 
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
ICS
 
Webinar On-Demand: Using Flutter for Embedded
ICS
 
A Deep Dive into Secure Product Development Frameworks.pdf
ICS
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
ICS
 
Practical Advice for FDA’s 510(k) Requirements.pdf
ICS
 
Overcoming CMake Configuration Issues Webinar
ICS
 
Enhancing Quality and Test in Medical Device Design - Part 2.pdf
ICS
 
Designing and Managing IoT Devices for Rapid Deployment - Webinar.pdf
ICS
 
Quality and Test in Medical Device Design - Part 1.pdf
ICS
 
Creating Digital Twins Using Rapid Development Techniques.pdf
ICS
 
Secure Your Medical Devices From the Ground Up
ICS
 
Ad

Recently uploaded (20)

PDF
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
PPTX
Tally software_Introduction_Presentation
AditiBansal54083
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
PPTX
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
Tally software_Introduction_Presentation
AditiBansal54083
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 

Software Development Best Practices: Separating UI from Business Logic

  • 1. April 23th, 2020 - Integrated Computer Solutions, Inc. Ryan Hampton - [email protected] Separating UI from Business Logic Software Development Best Practices
  • 2. Today's Agenda ● About ICS ● Principle of the Separation of Concerns ● Key benefits from application separation ● Qt applications and UI / Backend separation ● ICS's architectural approach with GreenHouse ● GreenHouse testing and simulation ● Summary
  • 3. HQ in Boston, offices in Sunnyvale and Ottawa Delivering 50+ projects each year for global brands About ICS... Founded in 1987, currently 120 employees
  • 4. We offer... ● UX design services ● Custom software engineering for embedded devices ● Platform and board support ● Software modules
  • 5. Lessons Learned ● Focus on the UX early ● Use an architecture that separates skills ● Reuse as much software as possible ● Simulate and test often ● Iterate and show progress to stakeholders often 500+ successful cutting edge projects on a short timeframe
  • 6. Principle of the Separation of Concerns Divide a computer program into sections that each address a separate and distinct concern of the application ● Fundamental Principle behind application separation ● Has been taught and practiced since Edsger W. Dijkstra used it in a paper in 1974 ● GUI applications have a clear separation in UI vs Backend code ● Traditional web architecture is classic example
  • 7. Key Benefits from Application Separation The necessity for a modular application grows along with the size and complexity ● Enables parallel development ● Enforces modularity ● Enhances testability ● Accelerates development time ● Reduces "brain burden"
  • 8. Qt Applications and UI / Backend Separation ● Qt developers tend to focus more on classes/object trees (generalization) ○ The architecture is the whole forest ● Break down application in terms of layers with well defined interfaces ○ Promotes high cohesion and loose coupling (good) ● A layer could be a module within an executable, a separate process in a system, or even a physically separate system ○ One can ship multiple UIs with the same business logic backend or allow the backend to be swapped out for a testing harness ● This matches up closely to the classic Qt application model… ○ Separate the UI code from the app logic code, by implementing the former with QML and JavaScript and the latter with C++
  • 9. Qt Applications and UI / Backend Separation ● Qt Quick provides four main ways to integrate C++ and QML. ○ Each has its own place and purpose. ● Subclassing QQuickItem: QQuickItem allows you to write your own visual and non-visual QML items using C++. ● Registering C++ types with QML: C++ classes can be registered with the QML type system, allowing them to be instantiated as QML types. ● Registering Context Properties / QML Singleton: QObjects can be registered with the QML context, allowing their properties to be directly accessed. ● Accessing QML objects through the QML object tree: All QML objects reside in a tree hierarchy and can be accessed via the root of the tree.
  • 10. Qt Applications and UI / Backend Separation Note: Qt documentation explains more in depth: https://doc.qt.io/qt-5/qtqml-cppintegration-overview.html
  • 11. Note: Checkout the Model-View webinar & blog series by Chris Probst and I Qt Applications and UI / Backend Separation Mp3ListModel mp3ListModel(downloadDirUrl); engine.rootContext()->setContextProperty("mp3ListModel", &mp3ListModel); qmlRegisterUncreatableType<Mp3ListModel>("DownloadManager", 1, 0, "Mp3ListModel", "Mp3ListModel should not be created in QML"); Code Time! class Mp3ListModel : public QAbstractListModel { Q_OBJECT public: explicit Mp3ListModel(QUrl downloadDir, QObject *parent = nullptr); // QAbstractListModel virtual methods ... };
  • 12. Figma UI & UX Design GreenHouse Development Desired Application • Reduces time to generate assets • Easy handoff from UX designers • Or, design directly in GreenHouse • Import Sketch, Photoshop, etc • Platform agnostic Qt/QML code • Enforces layered architecture • Reusable, testable, simulatable code • RPC support for remote backends and simulations • Import assets into GreenHouse • Easily interface and bind data • Add custom QML components • Integrate unique backends (Websockets, 0MQ, Mqtt, etc.) GREENHOUSE: THREE STEP APPROACH UX-FIRST APP DEVELOPMENT
  • 13. ICS's Architectural Approach with GreenHouse ● Produces a full layered / service-based architecture ● Allows for easy custom code injection into backend and/or simulator ● Provides testable interfaces between each layer ● Connects to specific application functionality in the backend through services (plugins) ● Permits remote execution of backend and swappable UI technology ● Supports multiple communication APIs Key Question: How does GreenHouse support application separation?
  • 15. GreenHouse Testing and Simulation ● System / "black box" testing ○ Implement complete behavior of complex systems in the simulator for testing and development ○ Test harness GUI for data / application state ○ Fully scriptable (JavaScript) ○ Record / playback ● Unit test coverage (googletest) ○ Generates unit tests for backend interfaces ○ Generates stubs for implementations ● Automated regression testing with Commander Key Question: How does GreenHouse support testing and simulation?
  • 17. Summary ● Separation of concerns is critical for testability, parallel development, development speed, and reducing "brain burden" ● GUI applications have a clear separation in UI vs Backend code ● Qt facilitates application separation with QML and C++ separation ● GreenHouse take architectural separation to the extreme with a service-based architecture. ● GreenHouse code facilitates testing between each interface
  • 18. QUESTIONS? Application Separation is a Software Best Practice Key Enforcer
  • 19. Resources and Further Reading ● https://www.ics.com/blog/heres-why-you-should-separate-ui-business-logic-your-application ● https://www.ics.com/webinar-demand-introducing-greenhouse ● https://www.ics.com/greenhouse ● https://www.ics.com/blog/greenhouse-ics-helps-software-engineers-turn-ux-reality ● https://www.ics.com/blog/exploring-model-view-design-qt-quick ● https://www.ics.com/blog/avoid-pitfalls-when-developing-qt-model-view-delegate-project ● https://www.ics.com/blog/multilayered-architecture-qt-quick ● https://felgo.com/doc/apps-howto-model-view-separation/ ● https://github.com/google/googletest ● https://doc.qt.io/qt-5/qtquick-bestpractices.html