A lot of people asked me if I could also show testing. I thought of doing that here, but the video was already so long. Would you like me to make another clean architecture testing guide where I show you how to write unit, integration, end-to-end and UI tests for this note app?
@prateekization
3 жыл бұрын
Yes please
@ramasubramanian3154
3 жыл бұрын
defenitely would love that.. Please also make videos explaing implementing bottom Dialog Fragments persistant and modal... There is no proper material or guide on how to implement that in a separate Dialog Fragment class
@nadilyt
3 жыл бұрын
yes please 🙏
@AaronStorey
3 жыл бұрын
Yes please!
@hariomsharma8842
3 жыл бұрын
Yes defenitely
@Landofcoding
2 жыл бұрын
I'm amazed of the amount of work you put in this single video and how you decided to make it a free video because this is a full course honestly
@PhilippLackner
2 жыл бұрын
Hope it helps!
@denisrudenko9937
2 жыл бұрын
Hi! When new video?))
@luckydevil1601
Жыл бұрын
I watch your videos too 😍😃 you are amazing!
@codinginflow
3 жыл бұрын
0:22 this pronunciation cracks me up
@juzarbharmal9998
2 жыл бұрын
0:31 "I will do you more if you like it and if it gets more views"" very poor choice of words there.
@tonnie7079
2 жыл бұрын
Good for commercial break although too early for a break at 0:22
@sijanneupane
3 жыл бұрын
You are changing lives, making them better! Thank you for this amazing masterpiece when much needed!
@twojaStara698
3 жыл бұрын
We are also changing lifes. After All we are who spend their time for learning and improving
@sijanneupane
3 жыл бұрын
@@twojaStara698 Its hard to find someone with constent videos and updating with time, hard to find a mentor, found one, Philip!
@pembatamang8233
3 жыл бұрын
your son hittin puberty
@mikelawson7144
3 жыл бұрын
Clean Architecture from Clean Man sounds different. I wish you to continue clean series (with Mappers, Use Cases, Data-Domain-Presentation, Package by Feature Architecture etc.). Keep going Philipp, You're AWESOME ! ❤️
@kareemkamal6185
3 жыл бұрын
hey, in Spotify play list in video 13 there are more than 10 person have the same problem in comment of "@Quang Đạt" please if anyone can help tell us if u can't set Like to make philipp see it please..
@glory9079
3 жыл бұрын
Here!
@Veradux__
3 жыл бұрын
It would be great to see how to set up the project with modules instead of just packages in a separate video, And to see what is so complicated about it! What you're doing is really cool, keep it up
@qweqwe1
2 жыл бұрын
absolutely nothing complicated
@LucasAndradeX
3 жыл бұрын
You are making an Awesome content!! But can you please run the application when coding the ui part?? It's easier for us (while coding along) to understand what's going on when we see the application running with the functionality we just coded, instead of writing everything and running only at the end. It would not take much more time to just show it running. Thanks!
@AndreiBacalu
2 жыл бұрын
i agree...or at least create previews for composables (i know this could take too much time unfortunately)
@florientmanfo
Жыл бұрын
It's really a complete course 😄, I'm just a beginner but I've learned and understood a lot through this course. Thank you
@javacore-qk9kd
6 ай бұрын
Brother i am not GAY but i have to tell you I LOVE YOU 💖💖 seriously i just wanna be like you, your content is on different level, keep teaching us new things
@hungtra3620
3 жыл бұрын
How can android understand when you type "vmState" or something like that
@lukalukovic5082
3 жыл бұрын
Live template he has a videos on those and how to make your own ones
@kaludzio
2 жыл бұрын
Amazing tutorial, I'm 25 years old and I've never seen that's good tutorial. You're making a good job. Greetings from Poland. Danke schon!
@JayShah_._._
3 жыл бұрын
This series is great Philipp ⚡Can you do one with firestore too ?
@bboydarknesz
3 жыл бұрын
Yes, please update this todo app to works with API with Firestore or Backend of Ktor for non less setup than Firstore 🤭
@sayyedaamerasharali7583
2 жыл бұрын
Hi Philip, the work and efforts you have done in making the video is amazing. Thanks for this. I have a Question: You create a model " Note " (data class) in the " Domain " Layer and used that in the " Data " layer as well.Is it Ok to do like that? or we can do more decoupling over there as well by doing some other stuff. Like if we get the data from the server in a model class and we need to save particular data to local database so for that another entity data class. Please answer.
@Renaro
3 жыл бұрын
Very nice video! Congratulations! Congratulations 👏! Question/Feedback: By creating entities that belongs to Room in your Business/Domain layer, aren't you mixing the data layer with the business/domain layer? In this way if the database change then all your use cases also changes.
@jimpauloovejera2599
2 жыл бұрын
yeah i was thinking the same thing! something's gotta be wrong with that
@paulvickers8059
2 жыл бұрын
I have seen it done elsewhere, and they have a domain model and data model, the one annotated with @Entity was in the data package
@raminvakili5515
Жыл бұрын
I'm late to the party :)), I just was watching the video and I wanted to point the exact same thing. you are right. domain should not care about the details like which DB we're using.
@olohialli9289
Жыл бұрын
It's unreal how much of quality content we get for free right here on this channel. Thanks man. You're awesome.
@vilmarcabanero2500
Жыл бұрын
Agreeee
@Ayor88
7 ай бұрын
2 years later but this video is gold for self-learner ! thank you very much for sharing your knowledge in such a good way. Everything is cristal-clear
@emreskgor2472
2 ай бұрын
cant build in my case always errors with compiler
@andreypoltev
Жыл бұрын
Can't make your project run, countless errors one after another
@N-fo4nq
10 ай бұрын
Have you tried Android Studio > File > Project Structure > SDK location > Gradle Settings > Add JDK > version 11 (install and apply)? It worked for me. If the intention was to just learn architecture I guess it's good quick workaround. Otherwise, yes, using old version of java does not look like a good idea
@hennerschade2452
2 жыл бұрын
Very great app and interesting video but unfortunately not very beginner friendly.
@jatinvashisht4293
3 жыл бұрын
Just finished the video Best video on clean architecture and jetpack compose ever on internet. Thank you Philipp ❤
@thkorkem
3 жыл бұрын
This video is so helpful. Let me give you a little tip. You can set subclasses of sealed class as data class by moving val orderType from constructor to inside of sealed class and making orderType abstract val. In this way, you will have copy and equals functions and more.
@roshanrai9089
3 жыл бұрын
After giving a couple of Android Developer interviews. This is what is expected, a Clean Architecture app with DB and API service, offline support, a list with data and image loading, pagination, and Unit Testing. IMO this will be a complete course for clean Architecture. You can consider this As a third clean Architecture video or you can make it a premium course as well whatever suits you. I think the majority of people including me will pay for it as well
@PhilippLackner
3 жыл бұрын
something like that will come as my next premium course including multi module architecture
@roshanrai9089
3 жыл бұрын
Awesome can't wait to see that course
@mytubekt
2 жыл бұрын
@@PhilippLackner What you do here is a great work. When you make free course anybody around the world can learn from you, but when you make premium courses unfortunately it is not possible for most of them, especially if they are from 3rd level (undeveloped) countries. On the other hand, if anyone has opportunity and money, then they can pay you or contribute to your channel with this JOIN button from KZitem. Thanks again for amazing tutorials.
@samdroid37
2 жыл бұрын
i'm having so much fun learning this stuff. just had to say it somewhere lol. sometimes youtube feels clouded with web development and this channel/community makes me feel "at home" with Android development. thank you philipp! might actually land this Android QA engineer position because of you lol.
@BorisBrodski
Жыл бұрын
A lot of good stuff to learn. Good explanation. Thank you very much! For the next one: I would find it much better, if you would develop the app incrementally. Going through 2 hours of video to be able to run the app for the first time is hard. Also, it is not the way, a beginner would implement apps.
@hocinehope8880
Жыл бұрын
Create a new class, create a new class, create a new class
@abdallahalaraby
2 жыл бұрын
This is just amazing, I've used clean architecture in one of my previous jobs but seeing it used with Compose and Coroutines is a whole new level, thanks for sharing this, I learned a lot from you!
@sergeilitvinenko932
3 жыл бұрын
You start with making the domain model, and first thing you do is coupling it with Room - the Data layer library. That's clearly not a good start of Clean Architecture tutorial, despite this video is for beginners
@elijahonduso
3 жыл бұрын
This is exactly what i wanted to ask him about. He should use mappers in this case
@tonyguyot
3 жыл бұрын
Totally agree on that. Outside of the data_source package there should be no reference to Room. As, in fact, Philipp himself explained it two minutes before adding Room references in the domain layer!
@trocchiettoski
3 жыл бұрын
maybe a pull request?
@shivampokhriyal2782
2 жыл бұрын
Can you share more details, probably some docs as well, as to why in the NoteDao file, getNote function is not a suspend function but all the rest are??
@daniboy943
2 жыл бұрын
Preview, preview, preview, preview, preview, preview. Please, don't forget to preview the UI during the tutorial.
@hellodevs
2 жыл бұрын
Congratulations Phillip, for sharing so much quality content here on youtube 🇧🇷 🇧🇷 🇧🇷
@halloyves
2 жыл бұрын
As a former Android developer I confirm that this is very beautiful code design. Thanks for the video!
@olohialli9289
Жыл бұрын
why did you leave android?
@halloyves
Жыл бұрын
@@olohialli9289 I got an opportunity on my career path which I did not want to decline :)
@halloyves
Жыл бұрын
BTW Kotlin is still my favorite programming language ;)
@YonkoCraft
2 жыл бұрын
hey i seem to have an error and i don''t why this is the error: couldn't make a guess for lr.aym.notesapp.Feature_note.presentaion.add_edit_note.AddEditnoteviewmodel_HiltModules.BindsModule if any one knows how to fix it please help and thank you
@brianryan4053
2 жыл бұрын
I liked comment about data structures and algorithms. You are absolutely right about this. Knowledge could be useful or useless. For mobile app development data structures and algorithms - useless knowledge. But probably for people who created Jetpack Compose and Android Studio this knowledge is important. But we do not develop Android Studio, we use Android Studio to develop.
@msontrent9936
2 жыл бұрын
Excellent stuff. Thanks for the hard work. Great architecture, good explanations, covers a broad range of topics (from db storage, UI design, animation). Very enjoyable.
@ferryzet
3 жыл бұрын
Phrase "Clean Architecture" now had become just another trendy buzz word used by everyone. Please read more about Clean Architecture, because the author clearly does not know how the Clean Architecture looks like. First of all - in Clean Architecture you would never define routing logic in the presentation layer. Yes, Jetpack Compose guidelines propose using nav graphs in the screens, but it is still possible to implement routing via routers with some Flow subscriptions. Secondly - Clean Architecture is not only about delegating specific singular tasks to specific components - this is also about on how you write your code. Parsing events in a single ViewModel method is not a "Clean" code style. This video is quite a good teaching tool for beginners though. Kudos for this, Philipp!
@chatgpt-undetected
Жыл бұрын
Could you tell me how to use kotlin flow in a domain module that is pure java ?
@devOmarAZ
3 жыл бұрын
PLZ we need multi module clean arch
@learnwithsrinath
Жыл бұрын
I am facing this error: please help me... ComponentProcessingStep was unable to process 'com.alchemy_bd.zenote.NoteApp_HiltComponents.SingletonC' because 'dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory' could not be resolved.
@pradeep9222
3 жыл бұрын
thank you so much lackner, your video's are absolutely worth for any one, I'm a android intern, initially I struggle too much, but your videos are helping me a lot, I'm watching you since last 2 months. thank you so much for all.
@PhilippLackner
3 жыл бұрын
Glad to help!
@mehdiparsaei1867
3 жыл бұрын
The base practice for naming data layer is: data db entity mapper (Entity to Model mapper) dao AppDatabase.kt api dto (Data Transfer Object) mapper (Dto to Entity mapper) result AppService.kt preferences repository
@TheManyfaced
3 жыл бұрын
Hey Philipp ,I've just subbed - very useful content - If I may suggest a very tiny ui improvement - whenever you expand the notes order menu - the menu icon could animate to a cross for example to create even more fluid ui experience :)
@georgh.179
3 жыл бұрын
Your videos have helped me so much, thank you!!! Do you also have a video planned with Clean Architecture where an Api and Room database are used?
@aparnasenthilkumar6594
Жыл бұрын
Got of lot of Information from this video. Thanks. I am facing problems when I am using 1.8 kotlin version with jetcompose 1.2. Anybody having issues with new versions of kotlin 1.8 or 1.9 with JET Compose?
@onuremrekaradag
Жыл бұрын
Hi Philip, when you are creating a compose component (for example a Column) from suggestion tab Its creating brackets and focusing inside the brackets when you press the enter. But when I tried It's not creating brackets and it's focusing to the inside of compose component. Where can I change this settings can you help me? When you press enter your code is like: @Composable Column(){ } And mine is always creating like this: @Composable Column { }
@dreamerslab
2 жыл бұрын
I have been using bloc pattern and folder-by-feature structure in flutter and I just love how compose has adapted patterns from flutter. Its just awesome. Watching this video explained use cases which I couldn't understand very well previously. Lots of love for your amazing free content. I can imagine the effort you have put into it. Thanks for such practical content. God Bless You.
@NetoLobo
Жыл бұрын
Congratulations man, it was an amamazing vídeo, thanks for share your knowledge
@pxnx
3 жыл бұрын
Whenever I see you in my Github feed I can't wait for the video :D Liebe Grüße aus Liechtenstein
@McJKor
2 жыл бұрын
Hi Philipp, Can I destroy the viewmodel after leave a screen? Official says the viewmodel will exist until the activity or process destroy.... Is that means we can not handle viewmodel lifecycle ? We usually use "viewmodelScope" to handle the livedate, flow etc...
@kostasmitsos5482
2 жыл бұрын
hi ..Thank you for your work ..i add a stupid line of code ... can someone help me on this .... Button(text = "lalala", onClick = {viewModel.state.value.notes.forEach { it.content="lalala" } }) i dont want to update this to database i change val content to var .... my problem is that this way is no recomposition ... and my question is .. how can i have a List and when i update an item see the results ... what is the right way to achieve such a thing ... thanks again !!!
@glebdolskiy
Жыл бұрын
49:05 why I don't have suggestion when typing hiltvm? Also I have an error if I type manually text from template
@A2359-ic7kv
6 ай бұрын
i know ,it may be a simple question , but 1- Why is a data class used to store the state values instead of defining each state separately in the view model? 2- Why to use copy() function instead of directly changing the data class property value? 3- By changing one of the values of the data class using the copy() function, doesn't it cause all the composables that read that state to be recomposed?
@piusgabula
3 жыл бұрын
Thanks for the great work Phillip
@ROHITKUMAR-pn4gj
Жыл бұрын
Doubt !!! I read that viewmodel doesn't knows about the views, meaning any nos of activity can use that same ViewModel But here in your example , Its seem ViewModel is tightly coupled with the activity or screen, Correct me if i am wrong
@ankitkhyalia3194
Жыл бұрын
Man I just learned Android Development basics from Meta Course and jumped to this for better understanding, it completely goes over the head. You explained this very well but could you use a flowchart to explain what is going on here? could somebody help me to understand?
@programmingwithjackchew903
2 жыл бұрын
May i know what is difference between private var _state = mutableStateOf(NoteStates()) and val state:State = _state Another question why don't need to use remember?
@mugashabradley523
10 ай бұрын
Hello @PhilippLackner ,very great content btw. Was wondering incase I'm to add an authentication feature in this tht relies on firebase. How would I make sure when the app runs the login screen with option to move to sign-up screen shows up first. And after successful login it takes me to the notes screen. It would be a pleasure if you gave me a hint. Thankyou
@0RL4ND0R4M0S
8 ай бұрын
Muy buen video, me ayuda muchisimo este tipo de videos... Muy Agradecido por compartir mucho conocimiento Philipp!!!!! Thanks
@MtaufiqH731
3 жыл бұрын
OMG !!! Another great again !!! I want to private learn with you sir. May I sir?😄
@wagnerarcieri
2 жыл бұрын
Wasupp bro ! thanks for sharing your knowlegde with us for free !! really like it ! but, I gotta say... dont know why U make so many cuts in the video.... removing the time the "student" have to absorb what you just said and understand the content... you are pretty smart and really have a deep understanding of the subject, but U must realize that you are not presenting this to yourself or for someone that already understands what you are doing, like an job interview.... you need to slow down a little bit mate... speak what you are about to write before you write, and not the otherwise, so we can follow by just hearing.... I really appreciate your videos, but I would love if you slow down a bit ! keep the great work !
@cristicode4301
Жыл бұрын
So this approach to group functionality by features is similar to microservices? So if you have a registration service and a billing service, you would group them by using this features approach?
@Karlankare
2 жыл бұрын
I was wondering...the NotesViewModel holds a NotesState that contains a List of Note.. but Note is a domain model. Is that ok? A domain model in the presentation layer?
@arthurgomes9248
Жыл бұрын
I have a question. For each feature data package, should i create its own service and retrofit implementation for each feature? This question came to me when refactoring an old app from a client. He as a networmodule in Koin that already provices a retrofit client with all the interceptors and configurations that we need. So, for a new feature, I created a new package called featurePurchaseHistory and created the same structure showed here, however, should i really rewrite a smaller implementation of the refrofitclient and service interface for each feature? Sounds repetitve.
@saria8340
Жыл бұрын
I don`t think using Room Entity in model is a Clean Arc approach. What if we won`t use room ? then we need to change code in model (get rid of anotations) which mean it is a 2-way dependency
@flavouredflight8628
18 күн бұрын
i know you'll be there to help me through these yt videos whenever I wanted to learn something around android dev, thank you, take care buddy.
@dekus80
2 жыл бұрын
39:29 Why not to add sort function to NoteOrder class and using polymorphism just call sort function. And not write this if/else?
@juanjo7102
2 жыл бұрын
45:15 Hi Philipp I get this error "type mismatch: inferred type is not database! but roomdatabase! was expected" can you tell me how to fix it please?
@PankajKumar6493
2 жыл бұрын
how does 'clickable' modifier work for NoteItem in NoteScreen class? Where is the onclick event for this? My note is not opening when I click on it plus there is no way to debug since I can't find the onclick event
@coffeedude
Жыл бұрын
Can I have multiple repository interfaces per feature? 🤔I'm making an online shopping app and I am having trouble deciding where to put products, wishlist items, and items in the cart. They seem to be part of the same feature because all of these things functionalities can be present in the same screen at the same time, but I'm thinking that maybe putting product related stuff on one interface, wishlist related stuff on another and cart related stuff on yet another interface might make it easier to test in the future
@Cool-c7y
2 жыл бұрын
Hey Philipp , when I save a web url in the description textfield but after saving I can't click on it or even it doesn't seen in blue color is there any way to do that in jetpack compose textfield
@enryd...
Жыл бұрын
funny how mvvm in android is quite similar to BLoC in flutter (at least to how I implement BLoC)
@JBrace78
Жыл бұрын
At about the 1:30:00 mark (approximately) when, in the NotesScreen.kt file you start adding the Scaffold, after the { (on the same line) but before the Column add 'padding ->' so you have ...scaffoldState = scaffoldState ){ padding -> Column( ... This will get rid of the pesky red underlines that show up on every line if you are using compose v1.2 or later.
@seriousinjaehun
Жыл бұрын
exactly
@houssemeddinelmasoudi3259
3 жыл бұрын
great tutorial great android developer you make it look easy and simple good job man keep going i learned a lot from you
@MindsetMentor_aj
Жыл бұрын
23:10 why can't we do suspend fun getNotesById(id: Int): Flow??
@andrewnzioki4385
5 ай бұрын
I don't know how you are able to make an almost ready production app in an hour. Thank you for the invaluable information though
@-A-23-59-
6 ай бұрын
Why use a data class for holding states ? Isn't it better to store them separately in the view model? And doesn't it lead to recomposition for all properties of that data class when we create a new instance with the copy() function ?
@original_anu
3 жыл бұрын
Guys, I think Philipp likes bacon
@eczema59
Жыл бұрын
In line with legal and regulatory requirements, we currently do not offer services for clients based in your country/region. ☹☹
@mahdi7236
2 жыл бұрын
Great video but what is the point of having a NoteEvent in ViewModel when I can call the corresponding function instead?
@nervous711
2 жыл бұрын
After 1:28:00 I still don't know what's the use of Box in NoteItem Is it sort of a container that contains the Canvas, text Column, and IconButton?
@gregoryirugi4408
Жыл бұрын
guys followed the tutorial to the end but when it came to run the app it throws an error in the Dao at fun getNotesbyId(id:Int) the error is unused parameter id any one who can help I will Appreciate
@NetanelCA2
Жыл бұрын
Very informative and interesting guide! Thx it was very helpful :)
@MrPicklepod
Жыл бұрын
So if two different areas used data from the same database, it would be a single feature right? Like if I had a notes section, and then a section that showed a calendar with the times you wrote notes, it wouldn't be two separate features, it would just be one correct?
@Geckuno
10 ай бұрын
Around 57:28. You've kept the recently deleted note reference to be able to use to restore. Let's say the delete operation was done with a network call, how would you go about controlling the result of the delete request and then handling the recentlyDeletedNote?
@saimhafeez4240
3 жыл бұрын
1st 1,162th View 😄
@grzegorzsamojedny
2 жыл бұрын
It wasn't easy, but I built my app based on this video. Great tutorial. Thank you
@showtinn3548
Жыл бұрын
please Philip check the code during the video, I repeated everything and it doesn’t work for me
@paulvickers8059
2 жыл бұрын
Do we need the deletenoteusecase? as it doesn't seem to do anything extra, should we really just call the repository from the viewmodel in this case?
@evgenyplaksin2380
2 жыл бұрын
Nice video bro! I hope my project also works, I now waiting for gradle
@rahul_spawar
Жыл бұрын
1:04:42 Can I use collectLatest instead of onEach and canceling manually, it'll automatically cancel ongoing coroutine
@dalu_
2 жыл бұрын
God Java, Kotlin they both such fugly languages and inefficient too.
@MrCelestiaI
3 жыл бұрын
By far the best series you have posted! Love these videos. No wonder they blew up! Thanks again man. Keep it up.
@rahul_spawar
Жыл бұрын
1:04:42 why didn't we just collect{} the flow value here like we always do and update the state why onEach
@yahyakhodr5826
3 жыл бұрын
Hello , Just wanna ask , what if i don't want to use this jetpack compose and use stable android studio ?
@user-rz1hv
2 жыл бұрын
sharedflow is kinda the xml way of doing this?! I thought they were brand new!
@ntuthukompaku8439
2 жыл бұрын
I like your videos. I just don't like your comment on Data Structures at the end
@mohdfazalshaikh8339
2 жыл бұрын
throw exception has hardcode strings as message. please let know how to se string resource there. Awesome work. keep up. all the best
@tanjimahmed213
3 жыл бұрын
Thanks, Phillip for your amazing video
@ameentehseen6900
2 жыл бұрын
Incase of multiple features and a single api interface class, where should we put the api interface class ?
@biswadeepchakraborty3546
2 жыл бұрын
Please make few more complicated apps like Netflix clone, facebook messenger clone
@harshv.tewari6869
2 жыл бұрын
I don,t know why but my radio buttons aren,t getting selected on click can anyone help
Пікірлер: 631