О разработке десктопных приложений
Александр Гранин
graninas@gmail.com
О себе
● Разработчик в “Лаборатории Касперского” (C++, C#)
● Выпуск ИВТ-04, 2009
● Хаскеллист, функциональный программист
● LambdaNsk - сообщество функциональных программистов
● Доклады: C++ User Group, Dev2Dev, DevDay, FPConf, LambdaNsk, …
● https://github.com/graninas
План
● Архитектура десктопных приложений
● Windows Presentation Foundation (WPF)
● Qt Quick, QML
● Вопросы реализации
Архитектура десктопных
приложений
Desktop applications
Presentation
Layer
(GUI)
Business
Logic Layer
Data Access
Layer
“Forms and Controls”
VCL (Delphi, C++ Builder)
WinForms (C#, .NET)
Qt Widgets (Qt, C++, crossplatform)
...
Model - View - Controller (MVC)
View
Controller Model
User Input Updates
Modifiers
WPF (C#, .NET)
Qt Quick (QML, C++, JavaScript)
“Separated Presentation”
View
ViewModel Model
Notifications
Bindings
Commands
Model - View - ViewModel (MVVM)
WPF
Windows Presentation Foundation
WPF (Windows Presentation Foundation)
XAML (.xaml)
Code behind (.cs)
ViewModel (.cs)
Data Model (.cs)
Services API (.cs)
NotificationsData Bindings
Model - View - ViewModel (MVVM)
ViewModel (.cs)
ViewModel (.cs)
XAML (.xaml)
Code behind (.cs)
XAML (.xaml)
Code behind (.cs)
WPF (Windows Presentation Foundation)
Model - View - ViewModel (MVVM)
XAML (.xaml)
Code behind (.cs)
ViewModel (.cs)
Data Model (.cs)
Services API (.cs)
NotificationsData Bindings
<WPF - Live Coding>
Qt Quick, QML
Qt Meta-Object Language
ViewModel (.cs)
ViewModel (.cs)
XAML (.xaml)
Code behind (.cs)
XAML (.xaml)
Code behind (.cs)
Qt Quick, QML (Qt Meta-Object Language)
Model - View - ViewModel (MVVM)
QML (.qml, JS)
ViewModel (.cpp)
Data Model (.cpp)
Services API (.cpp)
SignalsData Bindings
<Qt Quick, QML - Live Coding>
Вопросы реализации
Хороший код
Очень хороший код
● SOLID
● API
● Inversion of Control
● Unit testing
● Design Patterns
SOLID - принципы ООП-разработки
● Single responsibility principle
● Open/closed principle
● Liskov substitution principle
● Interface segregation principle
● Dependency inversion principle
Спасибо за внимание!
Александр Гранин
graninas@gmail.com
Чуть больше о C#
● Value Type vs Reference Type
● IEnumerable
● LINQ
● Lambdas
Чуть больше о C++
● Const reference
● STL Containers
● <algorithm>
● Lambdas

О разработке десктопных приложений / About desktop development