Play the video in 2x speed then you'll be learning SOLID in 10 minutes
finally , now i understand why interfaces are so important ,I struggled so much to find reason to use them , Thank you philipp <3
For Interface segregation principle; I think we shouldn't create a function (that sometimes needed and sometimes not) - printLogs() function in this video - inside the same interface, We should create another interface and declare this function in it and if we need this functionality we can implement this interface and plus other interfaces like FileLogger interface in this video
Experience is so freaking important!. 6 months ago, i saw this video i didnt understand anything of it. Now i understand everything! Because without knowing, i used all of this on my job, day to day on Android. Excelent! Now going for theory behind design patterns
In example for open/closed, you treated the FileLogger class as being completely closed. Your CustomFileLogger was effectively another implementation of a FileLogger interface. It is ok to add new functionality to the FileLogger class, for example adding another function called timestampedError(), as long as you do not change the logError() function it adheres to the open/closed principle. All existing consumers of FileLogger will work exactly as they did before. For your example of Liskov substitution, the CustomErrorLogger class does not violate Liskov substitution. All instances of FileLogger can be replaced with CustomErrorLogger and will work exactly the same. This is because all calls to logError() will still go to the base FileLogger via inheritance.
For the optional interface function, you could also do = Unit instead of the empty function braces.
Hi!) I am from Russia and I am learning English to find a job in another country. You have good English I understand almost everything and your videos help me to learn the language))
This is simple AF , nobody showed this important principle with this level of simple and easy examples ! Take a bow @Philipp
This is a most important video in the internet for devs today. It's not easy to explain this topic the way he did. Kudos @Philipp
I think a more appropriate example of Liskov substitution principle would be if an overriden function were to do something unexpected and contrary to its implementation in the base class. This can be shown with a base function that changes the state of the class which is overriden by a function that doesn't call the super method. The example provided doesn't break this principle. I liked the other explanations.
Thank you for your content Philipp! It helps so much and I'm glad there are developers who strive to make code as good as possible!
awesome man. I didn' like you previously when seen on interviews but Now addicted to how you teach and how humble you really are.
The video we didn't ask for, but really needed..
I would've killed for this video when I first started learning Android and programming; Thank you.
Vielen vielen Dank lieber Philipp für diese tolle Erklärung. Du hast da wirklich ein Talent solche Dinge sehr einfach für jeden verständlich zu machen. Liebe Grüße aus Österreich.
I watched this video after watching your multi module course. So clearly explained .. I clearly understand why you inject abstractions using hilt instead of concrete implementation ..... Thank you so much Philip
I got goosebumps when he said, "This changes the entire implementation in one line of code. 🦋"
Been binge watching all your recent videos. Amazing Android content 👏🏽 👌🏽
You have such a nice way of explaining things brother. Keep making these videos please. Thank you.
@iamkrishn