Sencha ExtJs Learning Part 2 - MVC And MVVM Architecture in ExtJs [ENGLISH]Irfan Maulana
This is my second presentation for ExtJs Private Learning.
Please see my first presentation here :
http://www.slideshare.net/IrfanMaulana21/sencha-ext-js-overview-part-1-layout-and-container-in-extjs
Microservice Approach for Web Development with Micro Frontendsandrejusb
Micro frontends extend concepts of microservices into front end development. The idea behind micro frontends is to represent Web app as composition of features, instead of one large monolyth application. Each feature is developed and tested end-to-end, from database to user interface. Oracle JET Web Components architecture suits perfectly for micro frontend development, Web Component encapsulates UI and back-end logic calls, allowing to build independent micro frontends.
Sencha ExtJs Learning Part 2 - MVC And MVVM Architecture in ExtJs [ENGLISH]Irfan Maulana
This is my second presentation for ExtJs Private Learning.
Please see my first presentation here :
http://www.slideshare.net/IrfanMaulana21/sencha-ext-js-overview-part-1-layout-and-container-in-extjs
Microservice Approach for Web Development with Micro Frontendsandrejusb
Micro frontends extend concepts of microservices into front end development. The idea behind micro frontends is to represent Web app as composition of features, instead of one large monolyth application. Each feature is developed and tested end-to-end, from database to user interface. Oracle JET Web Components architecture suits perfectly for micro frontend development, Web Component encapsulates UI and back-end logic calls, allowing to build independent micro frontends.
Discussion on angular offering, approaches to integrate web worker in angular (5 and 6) application, their pros and cons. A sample example implementation using custom web worker approach and integrating the same with CLI(1 and 6) and the application.
https://www.youtube.com/live/2XfhoQY9M7g?si=q6rno6xuxeYEYja3
This talk highlights how Angular monoliths can be modularized such that we end up with a scalable architecture. In detail, we cover Nx, Module Boundaries and the Enterprise Monorepo Pattern.
A GraphQL approach to Healthcare Information Exchange with HL7 FHIRSuresh KUMAR Mukhiya
Interoperability is accepted as a fundamental necessity for the successful realization of Healthcare Information Systems. It can be achieved by utilizing consistent standards defining syntactic and semantic meaning of the information being exchanged. HL7 FHIR is one of such open standards for Health Information Exchange (HIE). While HL7 FHIR supports Representational State Transfer (REST) architecture and Service-oriented Architecture (SOA) for seamless information exchange, it inherits the inflexibility and complexity associated with the RESTful approach. GraphQL is a query language developed by Facebook that provides promising techniques to overcome these issues. In this paper, we exploit the use of GraphQL and HL7 FHIR for HIE; present an algorithm to map HL7 FHIR resources to a GraphQL schema, and created a prototype implementation of the approach and compare it with a RESTful approach. Our experimental results indicate that the combination of GraphQL and HL7 FHIR-based web APIs for HIE is performant, cost-effective, scalable and flexible to meet web and mobile clients requirements.
Decomposing Applications for Scalability and Deployability (April 2012)Chris Richardson
Today, there are several trends that are forcing application architectures to evolve. Users expect a rich, interactive and dynamic user experience on a wide variety of clients including mobile devices. Applications must be highly scalable, highly available and run on cloud environments. Organizations often want to frequently roll out updates, even multiple times a day. Consequently, it’s no longer adequate to develop simple, monolithic web applications that serve up HTML to desktop browsers. In this talk we describe the limitations of a monolithic architecture. You will learn how to use the scale cube to decompose your application into a set of narrowly focused, independently deployable back-end services and an HTML 5 client. We will also discuss the role of technologies such as NodeJS and AMQP brokers. You will learn how a modern PaaS such as Cloud Foundry simplifies the development and deployment of this style of application.
AWS Webcast - High Availability with Route 53 DNS FailoverAmazon Web Services
This webinar will be discussing how to use DNS Failover to a range of high-availability architectures, from a simple backup website to advanced multi-region architectures.
Presented by Ishan Chattopadhyaya, LucidWorks
This talk is on the technical aspects of a new OpenStreetMap geocoder based on Apache Solr & Lucene. Recent changes to Apache Lucene and Apache Solr (4.0 and onwards) have seen a marked improvement in the spatial search capabilities. Also, its improved support for distributed storage and search, via the SolrCloud mode, makes applications using Solr scale easily. OpenStreetMap's current geocoder, Nomainatim, is based on Postgresql/PostGis. Some benefits of using Solr (as compared to a database system like Postgres) for building a geocoder, is robust partial text search, analysis in various languages (stemming, tokenization, stop words etc.), spell check, faceting, highlighting etc. Through this presentation, the author intends to bring out an appreciation for a Solr based geocoder.
( ReactJS Training - https://www.edureka.co/reactjs-redux-... )
This Edureka video on React Interview Questions and Answers will help you to prepare yourself for React Interviews. Learn about the most important React interview questions and answers and know what will set you apart in the interview process.
This video helps you to learn following topics:
1. General React
2. React Components
3. React Redux
4. React Router
Discussion on angular offering, approaches to integrate web worker in angular (5 and 6) application, their pros and cons. A sample example implementation using custom web worker approach and integrating the same with CLI(1 and 6) and the application.
https://www.youtube.com/live/2XfhoQY9M7g?si=q6rno6xuxeYEYja3
This talk highlights how Angular monoliths can be modularized such that we end up with a scalable architecture. In detail, we cover Nx, Module Boundaries and the Enterprise Monorepo Pattern.
A GraphQL approach to Healthcare Information Exchange with HL7 FHIRSuresh KUMAR Mukhiya
Interoperability is accepted as a fundamental necessity for the successful realization of Healthcare Information Systems. It can be achieved by utilizing consistent standards defining syntactic and semantic meaning of the information being exchanged. HL7 FHIR is one of such open standards for Health Information Exchange (HIE). While HL7 FHIR supports Representational State Transfer (REST) architecture and Service-oriented Architecture (SOA) for seamless information exchange, it inherits the inflexibility and complexity associated with the RESTful approach. GraphQL is a query language developed by Facebook that provides promising techniques to overcome these issues. In this paper, we exploit the use of GraphQL and HL7 FHIR for HIE; present an algorithm to map HL7 FHIR resources to a GraphQL schema, and created a prototype implementation of the approach and compare it with a RESTful approach. Our experimental results indicate that the combination of GraphQL and HL7 FHIR-based web APIs for HIE is performant, cost-effective, scalable and flexible to meet web and mobile clients requirements.
Decomposing Applications for Scalability and Deployability (April 2012)Chris Richardson
Today, there are several trends that are forcing application architectures to evolve. Users expect a rich, interactive and dynamic user experience on a wide variety of clients including mobile devices. Applications must be highly scalable, highly available and run on cloud environments. Organizations often want to frequently roll out updates, even multiple times a day. Consequently, it’s no longer adequate to develop simple, monolithic web applications that serve up HTML to desktop browsers. In this talk we describe the limitations of a monolithic architecture. You will learn how to use the scale cube to decompose your application into a set of narrowly focused, independently deployable back-end services and an HTML 5 client. We will also discuss the role of technologies such as NodeJS and AMQP brokers. You will learn how a modern PaaS such as Cloud Foundry simplifies the development and deployment of this style of application.
AWS Webcast - High Availability with Route 53 DNS FailoverAmazon Web Services
This webinar will be discussing how to use DNS Failover to a range of high-availability architectures, from a simple backup website to advanced multi-region architectures.
Presented by Ishan Chattopadhyaya, LucidWorks
This talk is on the technical aspects of a new OpenStreetMap geocoder based on Apache Solr & Lucene. Recent changes to Apache Lucene and Apache Solr (4.0 and onwards) have seen a marked improvement in the spatial search capabilities. Also, its improved support for distributed storage and search, via the SolrCloud mode, makes applications using Solr scale easily. OpenStreetMap's current geocoder, Nomainatim, is based on Postgresql/PostGis. Some benefits of using Solr (as compared to a database system like Postgres) for building a geocoder, is robust partial text search, analysis in various languages (stemming, tokenization, stop words etc.), spell check, faceting, highlighting etc. Through this presentation, the author intends to bring out an appreciation for a Solr based geocoder.
( ReactJS Training - https://www.edureka.co/reactjs-redux-... )
This Edureka video on React Interview Questions and Answers will help you to prepare yourself for React Interviews. Learn about the most important React interview questions and answers and know what will set you apart in the interview process.
This video helps you to learn following topics:
1. General React
2. React Components
3. React Redux
4. React Router
in these slides i have explained the difference between MVC, MVP and MVVM design patterns. slides includes definition, explanation and then implementation with code examples. it is a comparison oriented presentation.
Models used in iOS programming, with a focus on MVVMAndrei Popa
I have hopefully tried here to gather some useful stuff about MVVM which is the "proper" way to build a highly decoupled app in iOS today, a model that makes use of ReactiveCocoa as binding solution.
Unit Testing and Why it should be a pillar in your app development process.
This talk is built upon my previous "MVVM/Dependency Injection" talk: https://www.slideshare.net/yahyaSadiiq/mvvm-with-dependency-injection-189397414
Project: https://lnkd.in/giSK_jD
Patterns of evolution from monolith to microservicesKarina Mora
In this talk we are going to explore some patterns of evolution of legacy systems towards microservices, and how this transition can be oriented towards event-oriented architectures. We would like to talk about the trade-off between having a centralized database versus multiple microservices with their own database. In this scenario, how can we guarantee transaction consistency and when to use choreography versus orchestration. In addition, we are going to bring practical examples of when to use synchronous or asynchronous communication and when it makes sense to use something like Service Mesh or Event Sourcing.
Code Camp 06 Model View Presenter Architecturebitburner93
This is the slide show I created for the first Twin Cities Code Camp in November of \'06 - I did this when I was working for Digineer and also used it in a Digi-U session that I put on for the other consultants.
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
Navigating the Metaverse: A Journey into Virtual Evolution"Donna Lenk
Join us for an exploration of the Metaverse's evolution, where innovation meets imagination. Discover new dimensions of virtual events, engage with thought-provoking discussions, and witness the transformative power of digital realms."
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Mobile App Development Company In Noida | Drona InfotechDrona Infotech
Looking for a reliable mobile app development company in Noida? Look no further than Drona Infotech. We specialize in creating customized apps for your business needs.
Visit Us For : https://www.dronainfotech.com/mobile-application-development/
Launch Your Streaming Platforms in MinutesRoshan Dwivedi
The claim of launching a streaming platform in minutes might be a bit of an exaggeration, but there are services that can significantly streamline the process. Here's a breakdown:
Pros of Speedy Streaming Platform Launch Services:
No coding required: These services often use drag-and-drop interfaces or pre-built templates, eliminating the need for programming knowledge.
Faster setup: Compared to building from scratch, these platforms can get you up and running much quicker.
All-in-one solutions: Many services offer features like content management systems (CMS), video players, and monetization tools, reducing the need for multiple integrations.
Things to Consider:
Limited customization: These platforms may offer less flexibility in design and functionality compared to custom-built solutions.
Scalability: As your audience grows, you might need to upgrade to a more robust platform or encounter limitations with the "quick launch" option.
Features: Carefully evaluate which features are included and if they meet your specific needs (e.g., live streaming, subscription options).
Examples of Services for Launching Streaming Platforms:
Muvi [muvi com]
Uscreen [usencreen tv]
Alternatives to Consider:
Existing Streaming platforms: Platforms like YouTube or Twitch might be suitable for basic streaming needs, though monetization options might be limited.
Custom Development: While more time-consuming, custom development offers the most control and flexibility for your platform.
Overall, launching a streaming platform in minutes might not be entirely realistic, but these services can significantly speed up the process compared to building from scratch. Carefully consider your needs and budget when choosing the best option for you.
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
Graspan: A Big Data System for Big Code AnalysisAftab Hussain
We built a disk-based parallel graph system, Graspan, that uses a novel edge-pair centric computation model to compute dynamic transitive closures on very large program graphs.
We implement context-sensitive pointer/alias and dataflow analyses on Graspan. An evaluation of these analyses on large codebases such as Linux shows that their Graspan implementations scale to millions of lines of code and are much simpler than their original implementations.
These analyses were used to augment the existing checkers; these augmented checkers found 132 new NULL pointer bugs and 1308 unnecessary NULL tests in Linux 4.4.0-rc5, PostgreSQL 8.3.9, and Apache httpd 2.2.18.
- Accepted in ASPLOS ‘17, Xi’an, China.
- Featured in the tutorial, Systemized Program Analyses: A Big Data Perspective on Static Analysis Scalability, ASPLOS ‘17.
- Invited for presentation at SoCal PLS ‘16.
- Invited for poster presentation at PLDI SRC ‘16.
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
4. Vodafone Proprietary classified as C2 - Internal
1 November 20194
• Now, after working for a few years in this area, cooperating with many excellent
engineers, I realized that the product design doesn’t really make the code so
complex. It’s me who makes it so complicated.
• We have the experience writing spaghetti code which significantly hurts the
performance of our projects. The question is how can we fix it?
A good architecture pattern might help.
5. Vodafone Proprietary classified as C2 - Internal
1 November 20195
• The term “good architecture” may sound way too abstract. It’s also difficult to know
where to start. Here’s a tip:
Instead of focusing on the definition of the architecture, we can focus on how to
improve the testability of the code
6. Vodafone Proprietary classified as C2 - Internal
1 November 20196
• We might not be able to master all of different types of architectures. However, we
are still able to keep a simple rule in mind:
no matter what architecture we decide to use, the ultimate goal is to
make test simpler
7. Vodafone Proprietary classified as C2 - Internal
1 November 20197
• Using “Make test simpler” approach helps us to:
– Start thinking before writing code
– Put emphasis on how to separate responsibility intuitively
– have a clear and reasonable mindset toward the design of the architecture.
– not stuck in trivial details anymore.
8. Vodafone Proprietary classified as C2 - Internal
1 November 20198
• I’ll talk about:
– The reason we choose the MVVM over the Apple MVC
– How to adapt MVVM to design a clearer architecture
– How to write a simple real-world app based on the MVVM
• I won’t talk about::
– The comparison between MVVM, and other architecture
– A silver bullet that will solve all problems
9. Vodafone Proprietary classified as C2 - Internal
1 November 20199
• Model
– Responsible for the business logic of the application.
– Reading and writing data
– Persisting application state
– May even include tasks related to data management, such as networking and data validation.
MVC (Model-View-Controller)
10. Vodafone Proprietary classified as C2 - Internal
1 November 201910
• View
– Should have two important tasks:
– presenting data to the user
– handling user interaction
– A core principle of the MVC pattern is the view layer's ignorance with respect to the model layer.
– Views are dumb objects.
– They only know how to present data to the user.
– They don't know or understand what they are presenting.
MVC (Model-View-Controller)
11. Vodafone Proprietary classified as C2 - Internal
1 November 201911
• Controller
– The view and model layers are glued together by one viewContoller.
– A controller knows about the view layer as well as the model layer.
– This often results in tight coupling, making controllers the least reusable component of an application based on the
MVC pattern.
MVC (Model-View-Controller)
12. Vodafone Proprietary classified as C2 - Internal
MVC Advantages
1 November 201912
• Separation of concerns
– In most applications, there is no confusion about what belongs in the view and model layer.
– What goes into controllers is often less clear.
– The result is that controllers are frequently used for everything that doesn't clearly belong in the view or
model layer.
• Reusability
– Whereas controllers are often not reusable, view and model objects are easy to reuse.
13. Vodafone Proprietary classified as C2 - Internal
MVC Problems
1 November 201913
• A clear separation of concerns is great.
– It makes our life as a developers easier.
– Projects are easier to architect and structure.
But that is only part of the story.
• If the code we write doesn't belong in the view or model layer. No problem. Dump it
in the controller. Problem solved. Right?
Not really.
14. Vodafone Proprietary classified as C2 - Internal
MVC Problem Example
1 November 201914
• Data formatting is a common task.
– Imagine that you are developing an invoicing application.
– Each invoice has a creation date.
– Depending on the locale of the user, the date of an invoice needs to be formatted differently.
• The creation date of an invoice is stored in the model layer and the view displays
the formatted date. That is obvious. But who is responsible for formatting the date?
– Remember that the view shouldn't need to understand what it is presenting to the user.
– But why should the model be responsible for a task that is related to the user interface?
15. Vodafone Proprietary classified as C2 - Internal
MVC Problem Example
1 November 201915
• Wait a minute.
– What about our good old controller?
– That’s why we called it a Massive View Controller.
MVVM is here to rescue
16. Vodafone Proprietary classified as C2 - Internal
1 November 201916
MVVM is proposed by John Gossman in 2005.
The main purpose of the MVVM is to move the
data state from the View to the ViewModel.
17. Vodafone Proprietary classified as C2 - Internal
MVVM (Model — View — ViewModel)
1 November 201917
• View
– According to the definition, the View consists of only visual elements.
– In the View, we only do things like layout, animation, initializing UI components, etc.
• ViewModel
– There’s a special layer between the View and the Model called the ViewModel
– The ViewModel is the representation of the View.
– ViewModel provides a set of interfaces, each of which represents a UI component in the View.
18. Vodafone Proprietary classified as C2 - Internal
MVVM (Model — View — ViewModel)
1 November 201918
• Binding
– We use a technique called “binding” to connect UI components to ViewModel interfaces.
– So, in MVVM, we don’t touch the View directly, we deal with business logic in the ViewModel and thus
the View changes itself accordingly.
• We write presentational things such as converting Date to String in the ViewModel
instead of the View
Therefore, it becomes possible to write a simpler test for the presentational logic
without knowing the implementation of the View.
19. Vodafone Proprietary classified as C2 - Internal
1 November 201919
Let’s take a higher look at the figure below.
– In general, the ViewModel receives the user interaction from the View,
– fetches data from the Model,
– then process the data to a set of ready-to-display properties.
– The View updates itself after observing the change of the ViewModel.
That’s the whole story of the MVVM.
20. Vodafone Proprietary classified as C2 - Internal
20 1 November 2019
We are going to see a simple app, in which:
– The app fetches popular photos from 500px API and lists
photos in a UITableView.
– Each cell in the table view shows a title, a description and the
created date of a photo.
– Users are not allowed to click photos which are not labeled
for_sale.
A simple gallery app — MVC
21. Vodafone Proprietary classified as C2 - Internal
1 November 201921
So what’s wrong with the code?
(The 4 problems)
A simple gallery app — MVC
22. Vodafone Proprietary classified as C2 - Internal
1 November 201922
• If you plan to write tests for the PhotoListViewController, we’ll find
ourselves stuck since it’s too complicated.
• We have to mock the APIService, mock the table view and mock the
cell to test the whole PhotoListViewController.
A simple gallery app — MVC
23. Vodafone Proprietary classified as C2 - Internal
1 November 201923
Remember that we want to make writing tests easier?
.
.
.
Let’s try MVVM approach!
24. Vodafone Proprietary classified as C2 - Internal
1 November 201924
• In order to solve the problem, our first priority is to clean up the view controller
• Split the view controller into two parts: the View and the ViewModel.
• To be specific, we are going to:
– Design a set of interfaces for binding.
– Move the presentational logic and controller logic to the ViewModel.
VCs Comparing Time!
Try MVVM
25. Vodafone Proprietary classified as C2 - Internal
25 1 November 2019
• Let’s take a look at the UI components
in the View:
– Activity Indicator (loading/finish)
– TableView (show/hide)
– Cells (title, description, created date)
• Each UI component has a
corresponding
property in the ViewModel.
• We can say that what we will see in the
View should be the same as what
we see in the ViewModel.
27. Vodafone Proprietary classified as C2 - Internal
1 November 201927
• Practically, in the ViewModel an interface/property for binding looks like this:
• On the other hand, in the View, we assign a closure to the propChanged as a callback closure for value
updates.
28. Vodafone Proprietary classified as C2 - Internal
1 November 201928
Interfaces for binding in ViewModel
(cellViewModels, numberOfCells, state)
29. Vodafone Proprietary classified as C2 - Internal
1 November 201929
Bind the View with the ViewModel
(callback closures in initVM())
30. Vodafone Proprietary classified as C2 - Internal
30 1 November 2019
Data Flow
1. The PhotoListViewModel starts to
fetch data.
2. After the data fetched, we
create PhotoListCellViewModel obje
cts and update the cellViewModels.
3. The PhotoListViewController is
notified of the update and then
layouts cells using the
updated cellViewModels.
34. Vodafone Proprietary classified as C2 - Internal
1 November 201934
Recap
• Made a binding theme using the closure.
• Removed all controller logic from the View.
• Created a testable ViewModel.
“The secret to getting ahead is getting started.” — Mark Twain