SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
Multi View Constructed right
Eduardo M. Fleury
BossaConference 2010 - Manaus




       Multi View Constructed right
        Eduardo Madeira Fleury
        BossaConference 2010 - Manaus
Agenda




1 Introduction

2 Proposed architecture

3 Example

4 Real world issues

5 Conclusion
Everybody wants code that is




  • Easy to understand and learn
  • Easy to maintain
  • Easy to extend or modify
  • Less prone to bugs
We need code that




  • Can be created in parallel by the team
  • Assume look and feel of multiple platforms
  • Is future-proof regarding new GUI technologies
Need to support new devices




  • There is a lot more than re-compiling
  • Screen size and viewing distance
  • Environment of use
  • Looks / Platform integration
  • Input methods
Need to support new technologies




  • Qt widgets
  • Qt canvas (Graphics View)
  • Qt Quick (QML)
  • Other toolkits
A good architecture helps




  • Reduce the number of code-paths
  • Define relevant / semantic components
  • Do not define too many components
  • Define good component API and keep them independent
Proposed architecture
Identify important concepts in your app




  • Access data
  • Use data
  • Keep application state
  • User input
  • User output
Create component to access data




  • Handle DBs
  • Parse file meta-data (EXIF, ID3, etc)
  • Access different data sources (network, other apps)
  • Watch for data modification
Create component to handle program ’core’




  • Use data (play a song, interpolate an image)
  • Keep application state
  • Respond to high level user requests
  • Provide high level user output data
Create component to handle user interaction




  • Listen to low level user input events
  • mouse click, keyboard pressed, remote control
  • Output information to user
  • Draw song title on the screen, beep when new message arrives
Component relationship




                  Figure: Relationship
Expected result




  • Each component can be created in parallel by different people
  • Interface component can be modified to support new device
  • Interface component can use new technologies
Example
Component relationship
Real world issues
Difficulties arise in practice




   • Over-engineering
   • Excessive complexity
   • Poorly chosen interfaces / slice points
   • Promiscuity between components
   • Too much indirection in data flow
Over-engineering




  • We are brilliant at identifying patterns
  • We fail miserably when dealing with large number of items
  • Harder to make mental model of, or harder to understand
  • Harder to maintain and extend
Over-engineering
Ask yourself




    • What is the use case?
    • What problem am I trying to solve?
    • What potential of growth does this application have?
    • Do I really need that now?
Excessive complexity




  • Default use cases are usually easy to handle
  • Corner cases together mean lots of code
  • Are such corner cases worth the extra effort?
  • Lots of features, lots of bugs too...
Excessive complexity
Ask yourself




    • Some people are fetishists about useless features, avoid that!
    • Avoid bloatness as a whole
    • Define priorities, use your time wisely
    • Remember:
    • What is the use case?
    • What problem am I trying to solve?
    • Do I really need that now?
Poor component interfaces




  • Leads to an ’artificial’ division
  • Require data to be moved around
  • Poses obstacles to component replacement
  • Harder to be used and mentally modeled
Poor component interfaces
Ask yourself




    • Public API should be thoroughly thought of
    • Look at the problem from above
    • Try and make analogies with real world situations
    • Find a whiteboard, think before you code
    • Discuss your architecture with your peers
Components inter-dependency




  • Components need to include other components
  • Components are not replaceable
  • Programmers cannot look at one class and understand it
  • Some patterns are well known and easier to recognize
Bad Component relationship




                 Figure: Bad Relationship
Components inter-dependency
Ask yourself




    • Is this class a provider or consumer?
    • Use Qt Signal/Slot do decouple components
    • Consider an abstract public API
Data-flow indirection




  • Data goes through several classes to reach its destination
  • One reading the code needs to imagine where does that come from
  • API gets dirty due to methods that mostly move data around
  • It can also be inefficient performance-wise
Data-flow indirection
Ask yourself




    • Think about your whole application
    • Where is data coming from? Where is it going to?
    • Consider a high throughput link between consumer and producer
    • Find a good compromise between interdependence and indirection
Conclusion




  • There’s a need for good architectures
  • Good ideas exist
  • Many projects suffer from bad implementation of such ideas
  • Learn from yours and other’s mistakes
  • Homework: Find an useless feature in your favorite software
Questions




            Questions ?
Thank you!
eduardo.fleury@openbossa.org
   blog.eduardofleury.com

Más contenido relacionado

La actualidad más candente

Pair Programming
Pair ProgrammingPair Programming
Pair ProgrammingJazzSodhi
 
How Responsive Do You Want Your Website?
How Responsive Do You Want Your Website?How Responsive Do You Want Your Website?
How Responsive Do You Want Your Website?IWMW
 
Games Design 2 - Lecture 10 - Game Interface Prototyping
Games Design 2 - Lecture 10 - Game Interface PrototypingGames Design 2 - Lecture 10 - Game Interface Prototyping
Games Design 2 - Lecture 10 - Game Interface PrototypingDavid Farrell
 
Game Design 2: Lecture 5 - Game UI Wireframes and Paper Prototypes
Game Design 2: Lecture 5 - Game UI Wireframes and Paper PrototypesGame Design 2: Lecture 5 - Game UI Wireframes and Paper Prototypes
Game Design 2: Lecture 5 - Game UI Wireframes and Paper PrototypesDavid Farrell
 
Using an iPad and interactive presentations
Using an iPad and interactive presentations Using an iPad and interactive presentations
Using an iPad and interactive presentations EDUTIC_aulas_digitales
 
Open Source Projects: The Prospero Experience
Open Source Projects:The Prospero ExperienceOpen Source Projects:The Prospero Experience
Open Source Projects: The Prospero ExperienceEric Schnell
 
Using other presentation systems: Keynote, Prezi, etc.
Using other presentation systems: Keynote, Prezi, etc. Using other presentation systems: Keynote, Prezi, etc.
Using other presentation systems: Keynote, Prezi, etc. EDUTIC_aulas_digitales
 
Iterating a form wizard | from research to design
Iterating a form wizard | from research to designIterating a form wizard | from research to design
Iterating a form wizard | from research to designVernon Fowler
 
No one wants to SUX: A focus on inclusive user experience techniques
No one wants to SUX: A focus on inclusive user experience techniquesNo one wants to SUX: A focus on inclusive user experience techniques
No one wants to SUX: A focus on inclusive user experience techniquesIntopia
 
Yes, Virginia, PMs Are Responsible for Accessibility
Yes, Virginia, PMs Are Responsible for AccessibilityYes, Virginia, PMs Are Responsible for Accessibility
Yes, Virginia, PMs Are Responsible for AccessibilityAngela M. Hooker
 
Webanywhere: A Screen Reader On-the-Go
Webanywhere:  A Screen Reader On-the-GoWebanywhere:  A Screen Reader On-the-Go
Webanywhere: A Screen Reader On-the-GoJeffrey Bigham
 
SIM2012 Tilburg University: RouteMate
SIM2012 Tilburg University: RouteMateSIM2012 Tilburg University: RouteMate
SIM2012 Tilburg University: RouteMateRowanPreesman
 
Wei Lin, VP Engineering Telesign: Jobs, Women in CS/IT Identity Security
Wei Lin, VP Engineering Telesign: Jobs, Women in CS/IT Identity SecurityWei Lin, VP Engineering Telesign: Jobs, Women in CS/IT Identity Security
Wei Lin, VP Engineering Telesign: Jobs, Women in CS/IT Identity SecurityAlan Quayle
 
Digital accessibility intro 2021
Digital accessibility intro 2021Digital accessibility intro 2021
Digital accessibility intro 2021Joshua Randall
 

La actualidad más candente (15)

Pair Programming
Pair ProgrammingPair Programming
Pair Programming
 
How Responsive Do You Want Your Website?
How Responsive Do You Want Your Website?How Responsive Do You Want Your Website?
How Responsive Do You Want Your Website?
 
Games Design 2 - Lecture 10 - Game Interface Prototyping
Games Design 2 - Lecture 10 - Game Interface PrototypingGames Design 2 - Lecture 10 - Game Interface Prototyping
Games Design 2 - Lecture 10 - Game Interface Prototyping
 
Game Design 2: Lecture 5 - Game UI Wireframes and Paper Prototypes
Game Design 2: Lecture 5 - Game UI Wireframes and Paper PrototypesGame Design 2: Lecture 5 - Game UI Wireframes and Paper Prototypes
Game Design 2: Lecture 5 - Game UI Wireframes and Paper Prototypes
 
Using an iPad and interactive presentations
Using an iPad and interactive presentations Using an iPad and interactive presentations
Using an iPad and interactive presentations
 
Open Source Projects: The Prospero Experience
Open Source Projects:The Prospero ExperienceOpen Source Projects:The Prospero Experience
Open Source Projects: The Prospero Experience
 
Using other presentation systems: Keynote, Prezi, etc.
Using other presentation systems: Keynote, Prezi, etc. Using other presentation systems: Keynote, Prezi, etc.
Using other presentation systems: Keynote, Prezi, etc.
 
Iterating a form wizard | from research to design
Iterating a form wizard | from research to designIterating a form wizard | from research to design
Iterating a form wizard | from research to design
 
Software patterns
Software patternsSoftware patterns
Software patterns
 
No one wants to SUX: A focus on inclusive user experience techniques
No one wants to SUX: A focus on inclusive user experience techniquesNo one wants to SUX: A focus on inclusive user experience techniques
No one wants to SUX: A focus on inclusive user experience techniques
 
Yes, Virginia, PMs Are Responsible for Accessibility
Yes, Virginia, PMs Are Responsible for AccessibilityYes, Virginia, PMs Are Responsible for Accessibility
Yes, Virginia, PMs Are Responsible for Accessibility
 
Webanywhere: A Screen Reader On-the-Go
Webanywhere:  A Screen Reader On-the-GoWebanywhere:  A Screen Reader On-the-Go
Webanywhere: A Screen Reader On-the-Go
 
SIM2012 Tilburg University: RouteMate
SIM2012 Tilburg University: RouteMateSIM2012 Tilburg University: RouteMate
SIM2012 Tilburg University: RouteMate
 
Wei Lin, VP Engineering Telesign: Jobs, Women in CS/IT Identity Security
Wei Lin, VP Engineering Telesign: Jobs, Women in CS/IT Identity SecurityWei Lin, VP Engineering Telesign: Jobs, Women in CS/IT Identity Security
Wei Lin, VP Engineering Telesign: Jobs, Women in CS/IT Identity Security
 
Digital accessibility intro 2021
Digital accessibility intro 2021Digital accessibility intro 2021
Digital accessibility intro 2021
 

Destacado

Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010
Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010
Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010CybercomChannel
 
Karttapohjainen liiketoimintatiedon hallinta ja analysointi
Karttapohjainen liiketoimintatiedon hallinta ja analysointiKarttapohjainen liiketoimintatiedon hallinta ja analysointi
Karttapohjainen liiketoimintatiedon hallinta ja analysointiCybercomChannel
 
KDE in Your Life from Desktop to Pocket
KDE in Your Life from Desktop to PocketKDE in Your Life from Desktop to Pocket
KDE in Your Life from Desktop to PocketOpenBossa
 
KDE Plasma Mobile workspaces at Cybercom Developer Day 2010 by Marco Martin 7...
KDE Plasma Mobile workspaces at Cybercom Developer Day 2010 by Marco Martin 7...KDE Plasma Mobile workspaces at Cybercom Developer Day 2010 by Marco Martin 7...
KDE Plasma Mobile workspaces at Cybercom Developer Day 2010 by Marco Martin 7...CybercomChannel
 
KDE Plasma for Mobile Phones
KDE Plasma for Mobile PhonesKDE Plasma for Mobile Phones
KDE Plasma for Mobile Phonesaccount inactive
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 

Destacado (7)

Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010
Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010
Qt quick at Cybercom Developer Day 2010 by Alexis Menard 7.9.2010
 
Karttapohjainen liiketoimintatiedon hallinta ja analysointi
Karttapohjainen liiketoimintatiedon hallinta ja analysointiKarttapohjainen liiketoimintatiedon hallinta ja analysointi
Karttapohjainen liiketoimintatiedon hallinta ja analysointi
 
KDE in Your Life from Desktop to Pocket
KDE in Your Life from Desktop to PocketKDE in Your Life from Desktop to Pocket
KDE in Your Life from Desktop to Pocket
 
KDE Plasma Mobile workspaces at Cybercom Developer Day 2010 by Marco Martin 7...
KDE Plasma Mobile workspaces at Cybercom Developer Day 2010 by Marco Martin 7...KDE Plasma Mobile workspaces at Cybercom Developer Day 2010 by Marco Martin 7...
KDE Plasma Mobile workspaces at Cybercom Developer Day 2010 by Marco Martin 7...
 
KDE Plasma for Mobile Phones
KDE Plasma for Mobile PhonesKDE Plasma for Mobile Phones
KDE Plasma for Mobile Phones
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Similar a Multi View Constructed Right

Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...confluent
 
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...confluent
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software DevelopmentAhmet Bulut
 
iOSDC 2018 Presentation - Casual Talk
iOSDC 2018 Presentation - Casual TalkiOSDC 2018 Presentation - Casual Talk
iOSDC 2018 Presentation - Casual Talkkimi Ng
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyComsysto Reply GmbH
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyComsysto Reply GmbH
 
05 DIGI CREATIVE people&process
05 DIGI CREATIVE people&process05 DIGI CREATIVE people&process
05 DIGI CREATIVE people&processSheSaysCREATIVE
 
Deep Dive into the Idea of Software Architecture
Deep Dive into the Idea of Software ArchitectureDeep Dive into the Idea of Software Architecture
Deep Dive into the Idea of Software ArchitectureMatthew Clarke
 
Software architecture houstontechfest2020
Software architecture houstontechfest2020Software architecture houstontechfest2020
Software architecture houstontechfest2020Jane Prusakova
 
Understanding Microservices
Understanding Microservices Understanding Microservices
Understanding Microservices M A Hossain Tonu
 
From silex to symfony and viceversa
From silex to symfony and viceversaFrom silex to symfony and viceversa
From silex to symfony and viceversaRonny López
 
Scott mc cormick float mobile learning_prototyping strategy_mlearncon 2012
Scott mc cormick float mobile learning_prototyping strategy_mlearncon 2012Scott mc cormick float mobile learning_prototyping strategy_mlearncon 2012
Scott mc cormick float mobile learning_prototyping strategy_mlearncon 2012Scott McCormick
 
Domain Driven Design Big Picture Strategic Patterns
Domain Driven Design Big Picture Strategic PatternsDomain Driven Design Big Picture Strategic Patterns
Domain Driven Design Big Picture Strategic PatternsMark Windholtz
 
2019-Nov: Domain Driven Design (DDD) and when not to use it
2019-Nov: Domain Driven Design (DDD) and when not to use it2019-Nov: Domain Driven Design (DDD) and when not to use it
2019-Nov: Domain Driven Design (DDD) and when not to use itMark Windholtz
 
Game Design 2 (2013): Lecture 5 - Game UI Prototyping
Game Design 2 (2013): Lecture 5 - Game UI PrototypingGame Design 2 (2013): Lecture 5 - Game UI Prototyping
Game Design 2 (2013): Lecture 5 - Game UI PrototypingDavid Farrell
 
Introduction to GoLang
Introduction to GoLangIntroduction to GoLang
Introduction to GoLangNVISIA
 

Similar a Multi View Constructed Right (20)

Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
 
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
 
HCI
HCIHCI
HCI
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software Development
 
iOSDC 2018 Presentation - Casual Talk
iOSDC 2018 Presentation - Casual TalkiOSDC 2018 Presentation - Casual Talk
iOSDC 2018 Presentation - Casual Talk
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
 
05 DIGI CREATIVE people&process
05 DIGI CREATIVE people&process05 DIGI CREATIVE people&process
05 DIGI CREATIVE people&process
 
Deep Dive into the Idea of Software Architecture
Deep Dive into the Idea of Software ArchitectureDeep Dive into the Idea of Software Architecture
Deep Dive into the Idea of Software Architecture
 
Software architecture houstontechfest2020
Software architecture houstontechfest2020Software architecture houstontechfest2020
Software architecture houstontechfest2020
 
Understanding Microservices
Understanding Microservices Understanding Microservices
Understanding Microservices
 
CMS Crash Course!
CMS Crash Course!CMS Crash Course!
CMS Crash Course!
 
From silex to symfony and viceversa
From silex to symfony and viceversaFrom silex to symfony and viceversa
From silex to symfony and viceversa
 
Scott mc cormick float mobile learning_prototyping strategy_mlearncon 2012
Scott mc cormick float mobile learning_prototyping strategy_mlearncon 2012Scott mc cormick float mobile learning_prototyping strategy_mlearncon 2012
Scott mc cormick float mobile learning_prototyping strategy_mlearncon 2012
 
Design rule 3
Design rule 3Design rule 3
Design rule 3
 
Design rule 3
Design rule 3Design rule 3
Design rule 3
 
Domain Driven Design Big Picture Strategic Patterns
Domain Driven Design Big Picture Strategic PatternsDomain Driven Design Big Picture Strategic Patterns
Domain Driven Design Big Picture Strategic Patterns
 
2019-Nov: Domain Driven Design (DDD) and when not to use it
2019-Nov: Domain Driven Design (DDD) and when not to use it2019-Nov: Domain Driven Design (DDD) and when not to use it
2019-Nov: Domain Driven Design (DDD) and when not to use it
 
Game Design 2 (2013): Lecture 5 - Game UI Prototyping
Game Design 2 (2013): Lecture 5 - Game UI PrototypingGame Design 2 (2013): Lecture 5 - Game UI Prototyping
Game Design 2 (2013): Lecture 5 - Game UI Prototyping
 
Introduction to GoLang
Introduction to GoLangIntroduction to GoLang
Introduction to GoLang
 

Más de OpenBossa

Connecting Technology for Great Experiences - How does QML and Web fit together?
Connecting Technology for Great Experiences - How does QML and Web fit together?Connecting Technology for Great Experiences - How does QML and Web fit together?
Connecting Technology for Great Experiences - How does QML and Web fit together?OpenBossa
 
Intro to QML / Declarative UI
Intro to QML / Declarative UIIntro to QML / Declarative UI
Intro to QML / Declarative UIOpenBossa
 
Qt Techday - João Pessoa
Qt Techday - João PessoaQt Techday - João Pessoa
Qt Techday - João PessoaOpenBossa
 
The Unusual Suspect: Layouts for sleeker KDE applications
The Unusual Suspect: Layouts for sleeker KDE applicationsThe Unusual Suspect: Layouts for sleeker KDE applications
The Unusual Suspect: Layouts for sleeker KDE applicationsOpenBossa
 
The Unusual Suspect: Layouts for sleeker KDE applications
The Unusual Suspect: Layouts for sleeker KDE applicationsThe Unusual Suspect: Layouts for sleeker KDE applications
The Unusual Suspect: Layouts for sleeker KDE applicationsOpenBossa
 
O que há de novo no Plasma Netbook?
O que há de novo no Plasma Netbook?O que há de novo no Plasma Netbook?
O que há de novo no Plasma Netbook?OpenBossa
 
What's up about Plasma-MID?
What's up about Plasma-MID?What's up about Plasma-MID?
What's up about Plasma-MID?OpenBossa
 
Brasil, Open Source e o Mundo dos Negócios
Brasil, Open Source e o Mundo dos NegóciosBrasil, Open Source e o Mundo dos Negócios
Brasil, Open Source e o Mundo dos NegóciosOpenBossa
 
Negócios e Open Source
Negócios e Open SourceNegócios e Open Source
Negócios e Open SourceOpenBossa
 

Más de OpenBossa (11)

PySide
PySidePySide
PySide
 
Connecting Technology for Great Experiences - How does QML and Web fit together?
Connecting Technology for Great Experiences - How does QML and Web fit together?Connecting Technology for Great Experiences - How does QML and Web fit together?
Connecting Technology for Great Experiences - How does QML and Web fit together?
 
Intro to QML / Declarative UI
Intro to QML / Declarative UIIntro to QML / Declarative UI
Intro to QML / Declarative UI
 
Qt Techday - João Pessoa
Qt Techday - João PessoaQt Techday - João Pessoa
Qt Techday - João Pessoa
 
The Unusual Suspect: Layouts for sleeker KDE applications
The Unusual Suspect: Layouts for sleeker KDE applicationsThe Unusual Suspect: Layouts for sleeker KDE applications
The Unusual Suspect: Layouts for sleeker KDE applications
 
The Unusual Suspect: Layouts for sleeker KDE applications
The Unusual Suspect: Layouts for sleeker KDE applicationsThe Unusual Suspect: Layouts for sleeker KDE applications
The Unusual Suspect: Layouts for sleeker KDE applications
 
Qt
QtQt
Qt
 
O que há de novo no Plasma Netbook?
O que há de novo no Plasma Netbook?O que há de novo no Plasma Netbook?
O que há de novo no Plasma Netbook?
 
What's up about Plasma-MID?
What's up about Plasma-MID?What's up about Plasma-MID?
What's up about Plasma-MID?
 
Brasil, Open Source e o Mundo dos Negócios
Brasil, Open Source e o Mundo dos NegóciosBrasil, Open Source e o Mundo dos Negócios
Brasil, Open Source e o Mundo dos Negócios
 
Negócios e Open Source
Negócios e Open SourceNegócios e Open Source
Negócios e Open Source
 

Último

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 

Último (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 

Multi View Constructed Right

  • 1. Multi View Constructed right Eduardo M. Fleury BossaConference 2010 - Manaus Multi View Constructed right Eduardo Madeira Fleury BossaConference 2010 - Manaus
  • 2. Agenda 1 Introduction 2 Proposed architecture 3 Example 4 Real world issues 5 Conclusion
  • 3. Everybody wants code that is • Easy to understand and learn • Easy to maintain • Easy to extend or modify • Less prone to bugs
  • 4. We need code that • Can be created in parallel by the team • Assume look and feel of multiple platforms • Is future-proof regarding new GUI technologies
  • 5. Need to support new devices • There is a lot more than re-compiling • Screen size and viewing distance • Environment of use • Looks / Platform integration • Input methods
  • 6. Need to support new technologies • Qt widgets • Qt canvas (Graphics View) • Qt Quick (QML) • Other toolkits
  • 7. A good architecture helps • Reduce the number of code-paths • Define relevant / semantic components • Do not define too many components • Define good component API and keep them independent
  • 9. Identify important concepts in your app • Access data • Use data • Keep application state • User input • User output
  • 10. Create component to access data • Handle DBs • Parse file meta-data (EXIF, ID3, etc) • Access different data sources (network, other apps) • Watch for data modification
  • 11. Create component to handle program ’core’ • Use data (play a song, interpolate an image) • Keep application state • Respond to high level user requests • Provide high level user output data
  • 12. Create component to handle user interaction • Listen to low level user input events • mouse click, keyboard pressed, remote control • Output information to user • Draw song title on the screen, beep when new message arrives
  • 13. Component relationship Figure: Relationship
  • 14. Expected result • Each component can be created in parallel by different people • Interface component can be modified to support new device • Interface component can use new technologies
  • 18. Difficulties arise in practice • Over-engineering • Excessive complexity • Poorly chosen interfaces / slice points • Promiscuity between components • Too much indirection in data flow
  • 19. Over-engineering • We are brilliant at identifying patterns • We fail miserably when dealing with large number of items • Harder to make mental model of, or harder to understand • Harder to maintain and extend
  • 20. Over-engineering Ask yourself • What is the use case? • What problem am I trying to solve? • What potential of growth does this application have? • Do I really need that now?
  • 21. Excessive complexity • Default use cases are usually easy to handle • Corner cases together mean lots of code • Are such corner cases worth the extra effort? • Lots of features, lots of bugs too...
  • 22. Excessive complexity Ask yourself • Some people are fetishists about useless features, avoid that! • Avoid bloatness as a whole • Define priorities, use your time wisely • Remember: • What is the use case? • What problem am I trying to solve? • Do I really need that now?
  • 23. Poor component interfaces • Leads to an ’artificial’ division • Require data to be moved around • Poses obstacles to component replacement • Harder to be used and mentally modeled
  • 24. Poor component interfaces Ask yourself • Public API should be thoroughly thought of • Look at the problem from above • Try and make analogies with real world situations • Find a whiteboard, think before you code • Discuss your architecture with your peers
  • 25. Components inter-dependency • Components need to include other components • Components are not replaceable • Programmers cannot look at one class and understand it • Some patterns are well known and easier to recognize
  • 26. Bad Component relationship Figure: Bad Relationship
  • 27. Components inter-dependency Ask yourself • Is this class a provider or consumer? • Use Qt Signal/Slot do decouple components • Consider an abstract public API
  • 28. Data-flow indirection • Data goes through several classes to reach its destination • One reading the code needs to imagine where does that come from • API gets dirty due to methods that mostly move data around • It can also be inefficient performance-wise
  • 29. Data-flow indirection Ask yourself • Think about your whole application • Where is data coming from? Where is it going to? • Consider a high throughput link between consumer and producer • Find a good compromise between interdependence and indirection
  • 30. Conclusion • There’s a need for good architectures • Good ideas exist • Many projects suffer from bad implementation of such ideas • Learn from yours and other’s mistakes • Homework: Find an useless feature in your favorite software
  • 31. Questions Questions ?
  • 32. Thank you! eduardo.fleury@openbossa.org blog.eduardofleury.com