How to Build a Clean Architecture Stock Market App 📈 (Jetpack Compose, Caching, SOLID)

  Рет қаралды 145,013

Philipp Lackner

Philipp Lackner

Күн бұрын

This video will teach you all the relevant concepts you need to build a solid app with the clean architectural guidelines. You'll learn to use dependency injection with Dagger-Hilt, SOLID principles, CSV parsing with OpenCSV, working with remote APIs using Retrofit, local caching with Room, custom drawing on a canvas using Compose and much more.
Get 10% off learning to build industry-level multi-module apps using the code STOCK-MARKET-APP:
pl-coding.com/multi-module-co...
or learn to create any custom UI you like using canvas:
elopage.com/s/philipplackner/...
Get my FREE PDF about 20 things you should never do in Jetpack Compose:
pl-coding.com/jetpack-compose...
Join this channel to get access to perks:
/ @philipplackner
Get the initial source code for this video here:
github.com/philipplackner/Sto...
Get the final source code here:
github.com/philipplackner/Sto...
Join my Discord server:
/ discord
Regular programming advice on my Instagram page: / _philipplackner_
Checkout my GitHub: github.com/philipplackner
You like my free content? Here you can buy me a coffee:
www.buymeacoffee.com/philippl...
Introduction (00:00)
Checkpoint 1 - API & DB Setup (09:26)
Checkpoint 2 - StockRepository (30:38)
Checkpoint 2 - CompanyListingsParser (51:12)
Checkpoint 3 - CompanyListingsViewModel (1:04:04)
Checkpoint 4 - Company Listings Screen + DI (1:16:29)
Checkpoint 5 - CompanyInfo Data (1:46:41)
Checkpoint 6 - CompanyInfoViewModel (2:09:14)
Checkpoint 7 - Stock Chart (2:17:50)
Checkpoint 8 - Company Info Screen (2:54:19)
Trying it out (3:04:50)

Пікірлер: 261
@matinaghalarkhani4802
@matinaghalarkhani4802 2 жыл бұрын
You are a lot more qualified than all those university teachers and proffessors. thumbs up my bro and hope to learn a lot more from you.
@PhilippLackner
@PhilippLackner 2 жыл бұрын
🙏❤️
@walrider7374
@walrider7374 Жыл бұрын
because a good teacher can't never stop learning
@osisuper98
@osisuper98 2 жыл бұрын
Dude is just unbelievable! You are the reason I have a job.
@PhilippLackner
@PhilippLackner 2 жыл бұрын
🙏🙏❤️
@chax255
@chax255 2 ай бұрын
I am next in that list
@tonnie7079
@tonnie7079 2 жыл бұрын
Just landed from Multi-Module Architecture and the ink on my Certificate is not even dry, thx Philipp for the exposure.
@harisai3580
@harisai3580 2 жыл бұрын
Never expected the entire video without parts. TQSM
@fracta7
@fracta7 Жыл бұрын
This is a great tutorial. I have learnt many things from this. Many of the things I learnt here were applied on my personal project. Thank you for that!
@francismwangi9752
@francismwangi9752 Жыл бұрын
Thanks Phillip. I enjoyed every single bit of the video. I can't image how much more I'll learn and the skills I'll gain through the premium courses. I plan on buying one someday, to learn more and scale up. Thanks again
@garrettstrobel7051
@garrettstrobel7051 2 жыл бұрын
This is so good. Thank you for the time and thought that went into this.
@flowzk921
@flowzk921 2 жыл бұрын
Whew! finally finished this, learn't a lot, first time working with CSV rather than Json, many many Thanks Philip!!!
@MuhammadPandam
@MuhammadPandam 2 жыл бұрын
Always love your tutorials. I learn a lot from you
@mohammadansar2987
@mohammadansar2987 2 жыл бұрын
thank you so much philipp, appreciated! your dedication and hard work.
@Kylegil00
@Kylegil00 2 жыл бұрын
This videos have helped me so much. Thank you. Going to start this project today
@MetehanBOLAT
@MetehanBOLAT 2 жыл бұрын
Thank you very much Philipp. It is really a nice and necessary content for Android. Also, thank you for sharing it for free. We have a lot to learn from you. 👊
@raymondmichael4987
@raymondmichael4987 2 жыл бұрын
Sure this is a gold in it self, given for free his massive hours of work. We appreciate his work
@ThuyLe-mg3yi
@ThuyLe-mg3yi 2 жыл бұрын
L
@ThanhNguyen-se4hb
@ThanhNguyen-se4hb 2 жыл бұрын
@@raymondmichael4987 q
@ubersticks
@ubersticks 2 жыл бұрын
Thank you for your work Philipp. I enjoyed it and it is always educational to see your designs.
@PhilippLackner
@PhilippLackner 2 жыл бұрын
Thank you, glad it's helpful!
@faysaldeve385
@faysaldeve385 2 жыл бұрын
Thank you. I will watch this whole video because I really like it when the videos are long
@fauzanajiprayoga2955
@fauzanajiprayoga2955 2 жыл бұрын
This is really good, thanks for sharing it for free. i'll save to my watch list. Can't wait to learn from here. You are my incredible online professor ... love from Indonesia
@maciejpelc9039
@maciejpelc9039 Жыл бұрын
Thank you my man, you are helping to create new generation of devs!
@naveen12051990
@naveen12051990 2 жыл бұрын
Coded along the way till the end..very helpful looking forward for more.
@ChrisAthanas
@ChrisAthanas 2 жыл бұрын
I finished the app and added error handling, I learned a lot I fixed the date problem by using the first stock data day returned from api
@ChaosFleischer
@ChaosFleischer 6 ай бұрын
Thank you for this Amazing Tutorial! After i fixed some gradle issues its running now!!!!
@furkanbademli8402
@furkanbademli8402 4 ай бұрын
how to solve that? i m having gradle issues,too.
@MrVipulLal
@MrVipulLal 7 ай бұрын
All your videos are so good! Thanks!
@paulvickers8059
@paulvickers8059 2 жыл бұрын
This looks amazing, can't wait to start this tomorrow.
@jatinvashisht4293
@jatinvashisht4293 2 жыл бұрын
Just finished the video, hands down the best video on best practices I ever watched (including Philipps')
@PhilippLackner
@PhilippLackner 2 жыл бұрын
Thank you🙏
@Team_8x
@Team_8x 3 ай бұрын
Thanks awesome, you are a great inspiration and teacher!
@sijanneupane
@sijanneupane 2 жыл бұрын
Added to my watch later! will surely follow next week 🔥❤
2 жыл бұрын
Very good video! Thanks a lot for your outstanding work here!!
@mertgundogan2623
@mertgundogan2623 2 жыл бұрын
Thank you Philipp. Great tutorial. 👌
@federicocreti4699
@federicocreti4699 2 жыл бұрын
Good course, it has been a pleasure to follow! TY man
@minyounglee8528
@minyounglee8528 2 жыл бұрын
As always, thank u so much for your work!
@osmanmusse9432
@osmanmusse9432 2 жыл бұрын
Thanks you Philip your really helping the android community out
@AntonisKaklis
@AntonisKaklis 2 жыл бұрын
Great tutorial Philipp! Awesome content from you as always! Thank you. I would like to ask a question though. If we would like to add let's say Favorites functionality for some stocks. How we should approach this?
@sh3r1p49
@sh3r1p49 2 жыл бұрын
Thank you very much Philipp!
@YouGuto
@YouGuto 2 жыл бұрын
Man! You are the best... looking forward for the Tests
@UpLiftingU007
@UpLiftingU007 2 жыл бұрын
thanks philipp for the tutorial really amazing
@ARIZONAMUSIC
@ARIZONAMUSIC Жыл бұрын
Damn! What a man! We are not worthy of such concentrated delicious tutorials :)
@Revakovskyi
@Revakovskyi Жыл бұрын
Perfect!!!! Nothing to say more except THANKS a lot for your course and teaching!!! Perfect!!!
@PhilippLackner
@PhilippLackner Жыл бұрын
Glad you like it!
@rushidesai2836
@rushidesai2836 Жыл бұрын
Great content Philip!
@sepideh1085
@sepideh1085 2 жыл бұрын
precious tutorial . Absolutely your channel is on of the main reason has kept me motivated
@PhilippLackner
@PhilippLackner 2 жыл бұрын
❤️
@miladhashemzadeh5626
@miladhashemzadeh5626 2 жыл бұрын
Thank you a lot my friend always keep going up it's gr8 and you spend so much much of engery for it, please accept my Endless Gratitude. Nice and applicable🙌🙏
@ankitverma3932
@ankitverma3932 2 жыл бұрын
Some extraordinary effort.. cheers to you..
@pereyrarg11
@pereyrarg11 Жыл бұрын
Thanks for sharing your acknowledgement!
@VillageWoodWorks
@VillageWoodWorks 2 жыл бұрын
Congratulations on a presentation! Your dedication in helping others to help themselves, as they journey to become Android developers has far outpaced others on this platform. I am forever grateful for your commitment in this space. BEST REGARDS!
@PhilippLackner
@PhilippLackner 2 жыл бұрын
🙏🙏🙏
@meetsoni1938
@meetsoni1938 Жыл бұрын
Your efforts are highly appreciated🙏❤
@attiaaliattia
@attiaaliattia 2 жыл бұрын
This is a list of disadvantages of using extension functions instead of a dependency for the Data Mapper: Testing might be tricky: if you create a model in the repository class you can’t mock the mapping, so you are forced to test the mapping again. You lose the dependency inversion: when you are coding the repository you need to have the mapping beforehand, with the mapper instead you just put an interface and don’t care about the actual implementation. Also whenever you change the mapping your repository needs to be recompiled. Doesn’t work well with java, in case you have legacy code. Less reusability: by using a dependency the generic logic of the mapping can be extracted in another class. With an extension function you don’t have the same flexibility.
@orangasli2943
@orangasli2943 Жыл бұрын
Show some video and then talk
@DanielRodriguez-ds2qs
@DanielRodriguez-ds2qs 10 ай бұрын
@@orangasli2943 Why does he have to create a video to do so?, pointing things out is not wrong albeit he could have started the comment with something along the lines of "Great video!, (...) I do want to point out something, in my opinion (...)"
@Usam43
@Usam43 2 жыл бұрын
Thank you so much, loved this video. I like what you do and how you do it. I would like to take my expertise to the next level, hope you would help me out on that. Hopefully, I will keep learning from you more in future 🙏. Take ❤ brother.
@techmarinar
@techmarinar 2 жыл бұрын
This is very helpful thank you so much
@elfarouk3306
@elfarouk3306 2 жыл бұрын
man I really needed this And I said to my self I wish philipp has a tutorial on it . Like before Watching .
@brunno_gonzalez_dev
@brunno_gonzalez_dev 2 жыл бұрын
🔥🔥🔥🔥🔥🔥🔥 Thank you very much Philipp!
@sovrinfo
@sovrinfo 2 жыл бұрын
Thank you a lot Phillipp
@NatiAgame
@NatiAgame 8 ай бұрын
Simply, thank you 😊
@user-cs4dl3kk8r
@user-cs4dl3kk8r 2 жыл бұрын
Thank you very much man!
@snehilsinha4689
@snehilsinha4689 2 жыл бұрын
Absolutely love this ! 🔥❤
@hectorvector4887
@hectorvector4887 2 жыл бұрын
Thanks So much Sir.. learning from the best
2 жыл бұрын
Good job. Thank you very much
@rafamichalski6150
@rafamichalski6150 Жыл бұрын
You are right - this was an amazing course.
@nsikakisaac7872
@nsikakisaac7872 2 жыл бұрын
You're the GOAT!! Thanks for consistently putting out awesome content.
@yonirozental2549
@yonirozental2549 2 жыл бұрын
Great job sir!
@sergeytarasov5041
@sergeytarasov5041 2 жыл бұрын
Thank U Philipp, its good and easy!
@PhilippLackner
@PhilippLackner 2 жыл бұрын
Glad you liked it!
@abdelazizyasser3512
@abdelazizyasser3512 2 жыл бұрын
Thank u so much philipp, i want to learn more about canvas, it's very difficult but i'll try 😅
@PhilippLackner
@PhilippLackner 2 жыл бұрын
Yeah, my canvas course goes through it from very simple to difficult things. This video should give you a basic first understanding as well :)
@lokiksoni3519
@lokiksoni3519 2 жыл бұрын
Great work philipp.
@nishantabhishek8199
@nishantabhishek8199 8 ай бұрын
thanks for such an amazing content.
@rahathossainhimel7177
@rahathossainhimel7177 2 жыл бұрын
Thank You. You are amazing. Love You.
@wolfrudel7624
@wolfrudel7624 Жыл бұрын
Really nice video. Thanks❤ Why do you use mutableState (COMPOSE) and not stateFlow in your viemodel?
@karamba6936
@karamba6936 Жыл бұрын
Hello, thank you for your work. In second part of repository, where we load data from internet, cashe it to database. Then get from database with "" parameter. I think parameter must be querystring.
@amineayachi335
@amineayachi335 2 жыл бұрын
amazing 🤩 well done 👍
@devstuff2576
@devstuff2576 2 жыл бұрын
Thank You So so much brother
@emmanuelbamidele5064
@emmanuelbamidele5064 2 жыл бұрын
Hi Philip Thanks for this wonderful tutorial, I would like to know the explanation for the step you carried out at the 22:57 of your video where you created a CompanyListingEntity.toCompanyListing() method based on my understanding I would have created the toCompanyListing() without the CompanyListingEntity before it but you didn't create it that way. I also understand that the way you created the method it affords you direct access to the variable in the CompanyListingEntity class. I would really like to know what rule explains dis
@theg4meover988
@theg4meover988 Жыл бұрын
awesome tutorial !
@67Diadem
@67Diadem 2 жыл бұрын
Great!!! Thanks a lot
@BunsenBurns
@BunsenBurns 2 жыл бұрын
your new android studio colors are aesthetic af
@liosha2007
@liosha2007 2 жыл бұрын
Hello! Thank you so much for your content and for videos like this. I have already watched all your videos connected to Compose, but still found at least 5 things to make better in my apps watching this video. Also I would like to ask you to start making sample apps with edit/update/delete functionality. Apps with read/cache functions are not so difficult and you already have lots of samples and advices connected to that. As for CRUD apps, there are lots of places for which it is difficult to determine best way to do them. For example, the same app with one on the video, but with possibility to delete/create entries. When cache should be updated, how it should be updated, what to do in case of internet unavailable (deny modifying or caching changes and then syncing) and so on. How to use values from datastore in API requests, on which level it is correct to access datastore in cause of using it as part of API requests and in te same time as app settings. Anyway, thanks so much for content and sorry for my english:)
@PhilippLackner
@PhilippLackner 2 жыл бұрын
Thanks, but my channel is full of crud tutorials 🤔 check my note app course for example
@rokydas9779
@rokydas9779 2 жыл бұрын
You are just awesome bro. Lots of love to you
@hubinsord9009
@hubinsord9009 2 жыл бұрын
1:30:50 DI Application 1:31:47 DI Modules 1:32:50 DI AppModule 1:37:38 DI RepositoryModule 1:38:44 @Binds 1:40:57 Navigation
@yochilloutfam
@yochilloutfam 5 ай бұрын
So funny that I actually did it on Monday and the yesterday came to be sunday as well for me. What a coincidence. Lol :D
@JohanAlbrectsen
@JohanAlbrectsen 2 жыл бұрын
Amazing video!
@dailybrainexercises
@dailybrainexercises 2 жыл бұрын
Thank you Philip.
@PhilippLackner
@PhilippLackner 2 жыл бұрын
You're welcome
@joseivanpenuelasontiveros926
@joseivanpenuelasontiveros926 Жыл бұрын
All Android devs out there, guys, the content of this video is super valuable, I don't even think this should be free to watch, learn as much as you can from it, the content of this video really worths a lot and it's free!, thanks Philipp for this video!
@relaxwithmusic9036
@relaxwithmusic9036 2 жыл бұрын
Thanks for such content
@367labs
@367labs Жыл бұрын
Thank you bro 😎
@dougphillips5686
@dougphillips5686 2 жыл бұрын
Love it. Can you do a tutorial for developing a launcher and channel app for android tv?
@hussein9577
@hussein9577 2 жыл бұрын
well done Philipp
@trendystatuses161
@trendystatuses161 2 жыл бұрын
If possible please make an e-commerce app tutorial as well.
@martingaens2073
@martingaens2073 2 жыл бұрын
Hey Philipp! Awesome tutorial, thank you very much. I'm not sure if you created a video on that yet, but so far I always noticed that you organize your stuff in packages and say that for bigger projects we should use modules. Do you have any tutorials on how to make a clean architecture app with modules instead of packages?
@argahutama
@argahutama 2 жыл бұрын
amazing tutorial
@shrutivyas1965
@shrutivyas1965 Жыл бұрын
Awsome content, I have a query: 1:40 Why do we need to add @Inject when we don't need any object there? Thank you
@dev_jeongdaeri
@dev_jeongdaeri 2 жыл бұрын
super amazing!
@dreamer6228751
@dreamer6228751 2 жыл бұрын
Thank for new best video!))
@ahmedaboshady9733
@ahmedaboshady9733 2 жыл бұрын
thank you very much
@FreedivingTrainer
@FreedivingTrainer 2 жыл бұрын
New Formatter (datetime) object will be create on every mapping operation, is it make sense to have one formatter?
@maksym6415
@maksym6415 2 жыл бұрын
Thank you very much Philipp for a nice video. But I didn't understand, why do we need suspend repository function if it returns Flow ? For example: suspend fun getCompanyListings():Flow.
@rahul_spawar
@rahul_spawar Жыл бұрын
1:06:35 when any one of three state changes does it recomposes other composes as well ? for ex. when I swipe down To Refresh my loading state will go to true until I get response from api, when loading state changes from false to true any composable depending on it will recompose, will that change in state of CompanyListingState also recompose other composables?
@sahilfarhan5712
@sahilfarhan5712 2 жыл бұрын
Great man.... Always bringing best content....and I think you could have a different module for the network it would be much better instead of packages...
@PhilippLackner
@PhilippLackner 2 жыл бұрын
Not for a tiny app like this
@i.ankitmishra
@i.ankitmishra 2 жыл бұрын
Please tell what Android Studio IDE Theme you are using in this video. It looks great.
@saadowain3511
@saadowain3511 2 жыл бұрын
Thanks Philipp . Any discount for your courses !?
@codeforandroid
@codeforandroid 2 жыл бұрын
Very Nice course bud :)
@MichaelTirkey0719
@MichaelTirkey0719 2 жыл бұрын
Thank you so much for selflessly creating such amazing content @Philipp Always I’ve learned so much from your videos and can’t wait for more :) lots of love from India
@segov1
@segov1 2 жыл бұрын
New viewer here and instant sub for me. Great content with clear explanations and good practices. Thanks for making this & sharing
@PhilippLackner
@PhilippLackner 2 жыл бұрын
Glad it helped and welcome on board 🤙
@sadullaubaydullayev2062
@sadullaubaydullayev2062 2 жыл бұрын
Thank you
@ahmedabdelrahman1375
@ahmedabdelrahman1375 Жыл бұрын
Hello World! , if i use ktor not retrofit how to retrive CompanyListing ResponseBody [with ktor] ?
@user-ro9yw8bq2e
@user-ro9yw8bq2e 8 ай бұрын
is that ok to access util package Resource class from domain layer in clean arch?
@finaalfionita8392
@finaalfionita8392 2 жыл бұрын
Can someone tell me why does he use openCV and parsing? Do i need it also if the respond only a simple object like user object? Thank u
Should You Use Compose State or StateFlow in Your ViewModels?
13:59
Philipp Lackner
Рет қаралды 74 М.
Smart Sigma Kid #funny #sigma #comedy
00:40
CRAZY GREAPA
Рет қаралды 33 МЛН
Stay on your way 🛤️✨
00:34
A4
Рет қаралды 26 МЛН
Playing hide and seek with my dog 🐶
00:25
Zach King
Рет қаралды 37 МЛН
5 Fatal Coroutine Mistakes Nobody Tells You About
18:15
Philipp Lackner
Рет қаралды 86 М.
This Is My FAVORITE Error Handling Class
28:57
Philipp Lackner
Рет қаралды 28 М.
Make Your Code Clean With the SOLID Principles
18:24
Philipp Lackner
Рет қаралды 97 М.
ViewModels & Configuration Changes - Android Basics 2023
18:46
Philipp Lackner
Рет қаралды 110 М.
⚡ Арестович:ПУТИН всегда держит СЛОВО
5:10
военкор Арнольд
Рет қаралды 137 М.
How to Validate Forms with Clean Architecture (You're Doing it Wrong)
41:08
How to Avoid Refactoring Legacy Code HELL
35:57
ArjanCodes
Рет қаралды 36 М.
I Asked GPT-4 To Refactor My Legacy Codebase
12:39
Nick Chapsas
Рет қаралды 348 М.
Smart Sigma Kid #funny #sigma #comedy
00:40
CRAZY GREAPA
Рет қаралды 33 МЛН