Advanced Android App Architecture (first Edition) Real-world App Architecture In Kotlin 1.3 (Raywenderlich Tutorial Team, Yun Cheng etc.) (Z-Library)

Author: Raywenderlich Tutorial Team, Yun Cheng, Aldo Olivares Domínguez

技术

No Description

📄 File Format: PDF
💾 File Size: 22.9 MB
46
Views
0
Downloads
0.00
Total Donations

📄 Text Preview (First 20 pages)

ℹ️

Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

📄 Page 1
(This page has no text content)
📄 Page 2
Advanced Android App Architecture By Yun Cheng and Aldo Olivares Domínguez Copyright ©2019 Razeware LLC. Notice of Rights All rights reserved. No part of this book or corresponding materials (such as text, images, or source code) may be reproduced or distributed by any means without prior written permission of the copyright owner. Notice of Liability This book and all corresponding materials (such as source code) are provided on an “as is” basis, without warranty of any kind, express of implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use of other dealing in the software. Trademarks All trademarks and registered trademarks appearing in this book are the property of their own respective owners. Advanced Android App Architectures Advanced Android App Architecture raywenderlich.com 2
📄 Page 3
Dedications "To my mom, the first software engineer I ever knew." — Yun Cheng "To my family and friends, for all the support that I got during the writing of this book." — Aldo Olivares Domínguez Advanced Android App Architectures Advanced Android App Architecture raywenderlich.com 3
📄 Page 4
About the Authors Yun Cheng is an author on this book. Yun is a software engineer for the Runkeeper app at ASICS Digital in Boston, MA. If she's not running marathons or facilitating for the Girls Who Code club in Cambridge, MA, you can probably find her setting off the kitchen fire alarm with her cooking. You can also reach out to her on Twitter at @yuncheng13. Aldo Olivares Domínguez is an author of this book. Aldo is a Software Engineer passionate about creating amazing apps with great user interfaces. He's been an Android Developer since 2012 working primarly as a Freelancer and Instructor. Twitter: @aldominio. About the Editors Nick Bonatsakis is a tech editor of this book. Nick is an accomplished software engineer with over a decade of experience in mobile development across both Android and iOS. He is a passionate technologist, musician, father and husband. He currently works as an independent consultant under his own company, Velocity Raptor Inc. Matei Suica is a tech editor of this book. Matei is a software developer that dreams about changing the world with his work. From his small office in Romania, Matei is trying to create an App that will help millions. When the laptop lid closes, he likes to go to the gym and read. You can find him on Twitter or LinkedIn: @mateisuica Vijay Sharma is the final pass editor of this book. Vijay is a husband, a father and a senior mobile engineer. Based out of Canada's capital, Vijay has worked on dozens of apps for both Android and iOS. When not in front of his laptop, you can find him in front of a TV, behind a book, or chasing after his kids. You can reach out to him on Twitter and LinkedIn @vijaysharm. Advanced Android App Architectures Advanced Android App Architecture raywenderlich.com 4
📄 Page 5
Tammy Coron is an editor of this book. She is an independent creative professional and the host of Roundabout: Creative Chaos. She’s also the founder of Just Write Code. Find out more at tammycoron.com. Manda Frederick is the managing editor of this book. She has been involved in publishing for over ten years through various creative, educational, medical and technical print and digital publications, and is thrilled to bring her experience to the raywenderlich.com family as Managing Editor. In her free time, you can find her at the climbing gym, backpacking in the backcountry, hanging with her dog, working on poems, playing guitar and exploring breweries. About the Artist Vicki Wenderlich is the designer and artist of the cover of this book. She is Ray’s wife and business partner. She is a digital artist who creates illustrations, game art and a lot of other art or design work for the tutorials and books on raywenderlich.com. When she’s not making art, she loves hiking, a good glass of wine and attempting to create the perfect cheese plate. Advanced Android App Architectures Advanced Android App Architecture raywenderlich.com 5
📄 Page 6
Table of Contents: Overview What You Need 13....................................................................... Book License 14............................................................................ Book Source Code & Forums 15............................................. About the Cover 16..................................................................... Section I: Building a Foundation 17....................................... Chapter 1: Introduction 18.............................................. Chapter 2: Model View Controller 26......................... Chapter 3: Testing MVC 33.............................................. Chapter 4: Android Architecture Components 40. Chapter 5: Dependency Injection 48........................... Chapter 6: RxJava 55.......................................................... Section II: Fundamental UI Architectures 66.................... Chapter 7: Model View Presenter Theory 67.......... Chapter 8: Model View Presenter Sample 74.......... Chapter 9: Testing MVP 94.............................................. Chapter 10: Model-View-ViewModel Theory 108. Chapter 11: MVVM Sample with data binding 117............................................................................. Chapter 12: MVVM Sample with Android Architecture Components 132....................................... Advanced Android App Architectures raywenderlich.com 6
📄 Page 7
Chapter 13: MVVM Testing 149.................................... Section III: VIPER and MVI 160.............................................. Chapter 14: VIPER Theory 161...................................... Chapter 15: VIPER Sample 169...................................... Chapter 16: Testing VIPER 190...................................... Chapter 17: MVI Theory 203.......................................... Chapter 18: MVI Sample 214.......................................... Chapter 19: MVI Debugging 236................................... Conclusion 249.............................................................................. Advanced Android App Architectures raywenderlich.com 7
📄 Page 8
Table of Contents: Extended What You Need 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Book License 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Book Source Code & Forums 15. . . . . . . . . . . . . . . . . . . . . . . . About the Cover 16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Section I: Building a Foundation 17. . . . . . . . . . . . . . . . . . . . . Chapter 1: Introduction 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . What is this book? 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Why is app architecture important? 19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introducing the sample project 20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WeWatch sample app walkthrough 20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 2: Model View Controller 26. . . . . . . . . . . . . . . . . . The Model-View-Controller pattern 26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Applying MVC to Android 28. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WeWatch MVC code 29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 31. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 3: Testing MVC 33. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Android Testing 33. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Focusing on unit tests 35. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Unit testing the Movie class 36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Unit testing an Android Activity 37. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Why MVC makes unit testing hard 38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 39. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 4: Android Architecture Components 40. . . . . Using the Android Architecture Components 42. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Advanced Android App Architectures raywenderlich.com 8
📄 Page 9
Key points 47. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 47. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 5: Dependency Injection 48. . . . . . . . . . . . . . . . . . . What is a dependency? 48. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Why dependencies can be problematic 49. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Injecting dependencies 50. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dependency injection frameworks 51. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 53. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 54. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 6: RxJava 55. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What is the Observer pattern? 55. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Getting to know RxJava 57. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Observing events 57. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Frequently Not Asked RxJava Questions 64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 65. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Section II: Fundamental UI Architectures 66. . . . . . . . . . . Chapter 7: Model View Presenter Theory 67. . . . . . . . . . The Model-View-Presenter pattern 67. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MVP advantages and concerns 72. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 72. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 73. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 8: Model View Presenter Sample 74. . . . . . . . . . Getting started 74. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Applying MVP to the Movies app 75. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Main screen 75. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Add Movie screen 85. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Search Movie screen 89. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 92. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 93. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Advanced Android App Architectures raywenderlich.com 9
📄 Page 10
Chapter 9: Testing MVP 94. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Getting started 94. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Getting to know Mockito 94. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing the MainPresenter 97. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing the AddMoviePresenter 102. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing the SearchPresenter 104. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 106. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 107. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 10: Model-View-ViewModel Theory 108. . . . . The Model-View-ViewModel pattern 109. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MVVM by example 113. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MVVM advantages and concerns 114. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 115. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 116. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 11: MVVM Sample with data binding 117. . . . What is data binding? 117. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Getting Started 118. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementing data binding 119. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Challenge 130. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 130. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 131. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 12: MVVM Sample with Android Architecture Components 132. . . . . . . . . . . . . . . . . . . . . . . . . Getting started 133. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Current architecture layers 134. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating a movie repository 135. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating ViewModels 137. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using LiveData with ViewModels 140. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MVVM architecture 147. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 148. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 148. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Advanced Android App Architectures raywenderlich.com 10
📄 Page 11
Chapter 13: MVVM Testing 149. . . . . . . . . . . . . . . . . . . . . . . . Getting started 149. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating unit tests 150. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Section III: VIPER and MVI 160. . . . . . . . . . . . . . . . . . . . . . . . Chapter 14: VIPER Theory 161. . . . . . . . . . . . . . . . . . . . . . . . What is VIPER? 161. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VIPER Advantages and Concerns 166. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Questions you didn't think to ask 167. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 168. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 168. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 15: VIPER Sample 169. . . . . . . . . . . . . . . . . . . . . . . . Getting started 170. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementing the Main Module 173. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementing the AddMovie module 180. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementing SearchMovie 183. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 188. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 189. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 16: Testing VIPER 190. . . . . . . . . . . . . . . . . . . . . . . . Getting started 190. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing your Main presenter 193. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing the AddMovie presenter 197. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing SearchMovie Presenter 200. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 17: MVI Theory 203. . . . . . . . . . . . . . . . . . . . . . . . . . . What is MVI? 203. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MVI Advantages and Concerns 211. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Frequently Not Asked MVI Questions 212. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 212. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 213. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 18: MVI Sample 214. . . . . . . . . . . . . . . . . . . . . . . . . . . Getting started 215. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Advanced Android App Architectures raywenderlich.com 11
📄 Page 12
Going Reactive 216. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating Interactors and State 219. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating the Presenters 221. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating the Views 225. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Final thoughts 233. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 234. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 234. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 19: MVI Debugging 236. . . . . . . . . . . . . . . . . . . . . . . Getting started 236. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introducing Timber 239. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing the MVI architecture 240. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Key points 248. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Where to go from here? 248. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusion 249. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Advanced Android App Architectures raywenderlich.com 12
📄 Page 13
WWhat You Need To follow along with this book, you'll need the following: • Android Studio 3.3.2, available at https://developer.android.com/studio/index.html. This is the environment in which you'll develop the apps in this book. If you haven't installed the latest versions of Android Studio, be sure to do that before continuing on with the book. Also, the sample app described in this book makes use of a third party API by the Movie DB to search and retrieve movie information. In order to use the search API, you must first get access to an API key from the Movie DB. To get your API own key, sign up for an account at www.themoviedb.org. Detailed steps will be given in the first chapter of the book. raywenderlich.com 13
📄 Page 14
LBook License By purchasing Advanced Android App Architecture, you have the following license: • You are allowed to use and/or modify the source code in Advanced Android App Architecture in as many apps as you want, with no attribution required. • You are allowed to use and/or modify all art, images and designs that are included in Advanced Android App Architecture in as many apps as you want, but must include this attribution line somewhere inside your app: “Artwork/images/designs: from Advanced Android App Architecture, available at www.raywenderlich.com.” • The source code included in Advanced Android App Architecture is for your personal use only. You are NOT allowed to distribute or sell the source code in Advanced Android App Architecture without prior authorization. • This book is for your personal use only. You are NOT allowed to sell this book without prior authorization, or distribute it to friends, coworkers or students; they would need to purchase their own copies. All materials provided with this book are provided on an “as is” basis, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. All trademarks and registered trademarks appearing in this guide are the properties of their respective owners. raywenderlich.com 14
📄 Page 15
BBook Source Code & Forums This book comes with the source code for the starter and completed projects for each chapter. These resources are shipped with the digital edition you downloaded from store.raywenderlich.com. We’ve also set up an official forum for the book at forums.raywenderlich.com. This is a great place to ask questions about the book or to submit any errors you may find. raywenderlich.com 15
📄 Page 16
AAbout the Cover Birds are, of course, perhaps most well known for their ability to build fantastic nests, and the satin bowerbird, which graces this cover, is no exception. While many birds craft modest nests of sticks, mud and bits of softness collected here and there, the satin bowerbirds are much more ambitious with their structures. Perhaps one of nature's most creative and serious architects, these birds build "bowers" to attract a mate. They build and decorate with anything from berries to flowers to drinking straws to ballpoint pens. Interestingly, as they mature, they prefer to architect with objects of the color blue. Like these birds, good engineers understand the importance of good architecture: It is ambitious, structurally sound, attractive and sets your work apart from other simple- nesting developers. You can learn more about these creative and intelligent birds, here: https:// en.wikipedia.org/wiki/Satin_bowerbird. raywenderlich.com 16
📄 Page 17
Section I: Building a Foundation This section introduces you to topics that will serve as a foundation for your understanding of the UI architecture patterns. You’ll get introduced to the sample project, an app named WeWatch, that allows users to keep track of movies to watch. You’ll also learn concepts that aid architecture, including Android Architecture Components and dependency injection. • Chapter 1, Introduction: This chapter explains what this book is about and its intended audience. By reading this chapter, you’ll gain a better understanding of why apps need good architecture. You’ll also get an introduction to the sample app that you’ll be building throughout this book. • Chapter 2, MVC: The sample project starts off written in the Model View Controller pattern, with the Android Activity serving as both the View and the Controller. In this chapter, you’ll learn the history of the MVC pattern as applied to Android, and you’ll learn why this UI architecture pattern fails to meet two primary standards for good code: separation of concerns and unit testability. • Chapter 3, Testing MVC: Here, you’ll get a quick review on writing unit tests with JUnit, and you’ll learn why the MVC pattern results in poor unit testability of code. • Chapter 4, Android Architecture Components: In this chapter, you’ll get an overview of the Android Architecture Components and go into detail on the libraries used in the sample project at various points in the book: Room, ViewModel, LiveData and Data Binding. • Chapter 5, Dependency Injection: An important concept in writing testable code is using dependency injection to inject mock objects into code. Here, you’ll learn the theory behind dependency injection and create a practical sample project using Dagger 2, a popular dependency injection framework for both Java and Android. • Chapter 6, RxJava: In this chapter, you’ll get an overview of RxJava and go into detail on how the library is used in the sample project at various points in the book. raywenderlich.com 17
📄 Page 18
1Chapter 1: Introduction By Yun Cheng Do you remember when you made your first “Hello World” app on Android? From there, you likely progressed to creating complex user interfaces to display data, made web calls to APIs and managed the persistence of data. As the Android apps you built became more complex, you might have wondered if there were coding best practices available to make your apps more extensible, maintainable and testable. Perhaps you even wondered how to architect your apps so they’re best suited to your particular needs. Given that Google (until very recently) did not provide an opinion on app architecture, Android developers were left to come up with their own. Architecture patterns like MVC, MVP, MVVM, MVI and Viper are debated passionately among Android developers. So, what are these patterns and which one is the best? The short answer to the latter question is that it depends on your particular app and its needs. With that in mind, this book aims to guide you to an informed decision by answering the former question in detail. What is this book? Throughout this book, you’ll work with one sample project named WeWatch. You’ll build this project multiple times using each of these architecture patterns. During this process, you’ll get a hands-on comparison of the patterns and gain a deeper understanding of the theory behind them. raywenderlich.com 18
📄 Page 19
Who is this book written for? This book is for you if: • You’re a developer who already has a basic understanding of creating Android apps in Kotlin. • You want to take your apps to the next level with robust architecture. • You’re familiar with unit testing with JUnit and want to write unit tests for your app. How to use this book It’s not necessary to read the chapters in this book in order. Feel free to jump to the architecture pattern that interests you the most. If there are concepts that are covered in another chapter, you’ll be directed to those chapters for more information. For instance, the sample project uses the following Android Architecture Components at various points in the book: Room, LiveData, ViewModel and data binding, so you may want to read the Android Architecture Components chapter for more information. The project also makes use of RxJava in some chapters, so be sure to check out the RxJava chapter if you need a primer on that library. Why is app architecture important? The idea behind the app architecture patterns presented in this book is that they all exist to help you design your app in such a way that allows the app to be maintainable as it scales. Two concepts, in particular, are useful: separation of concerns and unit testing. Firstly, separation of concerns deals with separating the components of your app by responsibility. For example, when you update the UI of your app with a fancy new design, you want to do so without having to change any of the other code, such as the underlying data. As you add more features to your app, you want to do so without having to change too much of your existing code. Finally, as your app grows, you want to be able to test the app to ensure you didn’t break the logic of existing features. Now that you know the motivation behind app architecture, it’s time to get yourself acquainted with the sample project in the book. Advanced Android App Architectures Chapter 1: Introduction raywenderlich.com 19
📄 Page 20
Introducing the sample project WeWatch, the app you’ll build in this book, keeps a list of movies you want to watch, allowing you to easily add and delete movies within the app. To add a movie, a user can manually enter the movie or search for movies from a database of movies provided by The Movie Database (www.themoviedb.org) API. The Movie Database API key Any app that wants access to The Movie Database API must provide an API key in the network call to identify itself to the API. You’ll need to obtain your own API key to work with the sample code within this book. To obtain your API key, sign up for an account at www.themoviedb.org. Then, navigate to your account settings on the website, view your settings for the API and register for a developer API key. After receiving the API key, open the starter project for this chapter and navigate to RetrofitClient.kt. There, you can replace the existing value for API_KEY with your new key. WeWatch sample app walkthrough From the project resources open the starter project for this chapter in Android Studio. Take a moment to familiarize yourself with the structure of the project. Build and run the app to see what you’re working with. Advanced Android App Architectures Chapter 1: Introduction raywenderlich.com 20
The above is a preview of the first 20 pages. Register to read the complete e-book.

💝 Support Author

0.00
Total Amount (¥)
0
Donation Count

Login to support the author

Login Now
Back to List