Thank you so much for the amazing PHP courses you share online! Your tutorials have been a game-changer for me, and I can't express how much I’ve learned from your clear and practical explanations. Your passion for teaching and your ability to simplify complex concepts have inspired me to keep growing as a developer. I'm so grateful for all the effort and dedication you put into helping people like me learn and improve. Keep up the fantastic work-you’re making a real difference in the lives of so many aspiring developers!
I am very thankful you make such quality videos. Please keep making more videos on concepts like these, these are very helpful. I really feel like learning a lot in short time watching your videos.
You make great content. Thank You much. Your code style is highly elegant. I'm looking forward to form request, auth, authorization, middleware, and several most common patterns using in laravel
awesome and fantastic. I might gonna use this reference someday. Immutable and side effect free values makes ease by making it less prone to bugs, don't know yet when to use the equalTo method for checking equality. But I might figure it out someday, thanks
Hi Gio, big thanks for these PHP tutorials. I have years of experience, but after these videos, I still learnt a lot and now much more confident. Btw do you have any recommendations for similar types of videos for Javascript? I have watched Laracasts but looking for something different.
I'm really excited about how introducing ORM crippled Entitites into some data-db objects, so you need to introduce things like Value Objects to heal your improper object design. "Entities are normally identified with ID" - yes? Since when? Entity is normal object with properties and methods. Like any other object. Just using ORM made them so. Even senior developers are crippling the OOP by using ORM and then using external "services" to implement methods, which should be integral to object (entity). And then adding artificial IDs to every entity, so no one really understand the code nor DB structure, because is full of IDs you don't really need for anything (because you have composite keys, right?). To conclude this: you don't need any VO here. Simply use your entities and set their properties by other entities, like dimension etc. Sure, you can make them immutable, by default, or by method. Then your object of PackageDimnension class is valid for whole module, even for another entity, like Pallet. Then pick your pre-set PriceCounter, feed it with Package object and it will set the price. Then just pass the object into some kind of mapper to store value, that's it.
You make some good points & I partially agree, but Value Objects are a big part of DDD design and part of the PHP ecosystem, and so are entities. This is why I decided to cover it because new devs will eventually work with some sort of ORM or come across these terms and is important for them to know what they are and what is the difference. We covered Entities earlier in this series (within ORM & Doctrine/Symfony context) so explaining the difference in that context was important.
Thanks for awesome video again. But at 21:15 does DTO has no id? i.e what if we have a DTO that represent a User model in laravel? User instance must have id then how come its DTO does not?
No DTO has no id. That is Entity, you would have User entity. DTO is just to pass data around so like take form request parameters create DTO and pass that DTO to a service class to create the User entity
@@ProgramWithGio thanks for your reply... But that seems to just 1 use case of DTO, there is another scenario where DTO can be used as api resource. There is a package called "spatie-laravel-data" which allows id property in DTO (check section "as-a-resource/from-data-to-resource" at its doc for detail).
@@free2idol1 sure, I just gave you one example since you asked. There are more uses for DTO for sure and API is one of them, I showed API example as well in the video. I have not used that package, DTOs typically dont have an ID and business logic. If someone implemented it with ID it's up to them, maybe has a special use case.
@@free2idol1 I checked the package and they call those Data Objects and use it for multiple purposes. Within the "as DTO" section you will see there is no ID. So that package isn't just DTO, it's more like a multipurpose DTO.
@@ProgramWithGio Okay... it seems they've mixed 2 concepts (DTO and Entities) in that single package. Do you think so? Also, if I put `public ?$id` in the DTO, then what would be the consequence later on? And how to apply Entitiy concept in Laravel? or a Eloquent Model already represents an Entity?
Glad you liked it, thank you. Unfortunately I don't follow DDD and don't know much about it. Maybe in future I can make a series about it & learn it myself along the way 👍. Thanks for the suggestion
@@ProgramWithGio may I know why you don't prefer DDD and what architecture/ design method you often use in your development process? I am researching DDD and it seems articles about it on the internet is mainly theory-based.
Hi,, Thank you for a wonderful video & deep explanation about it.. It's really easy to understand.. May I know, what is the PHPStorm plugin that you using to make this sign '->', '===', etc pretty? I seen it in your another video..
Valuable lesson again, Gio,. Thank you. In the code you kept the new enum, VO's and Service class together in a directory. Is that what you would normally do? I can see they are related and perhaps the only relevance for them is in that service, but you also created an enum directory in the app, so I wondered if there are rules in that you follow.
Good observation. I usually put them in their own directories like Data Objects and place value objects & DTOs there. I didn't pay attention to the folder structure in this lesson cause I probably got carried away talking 🙈. In the project section you will see that we will have DataObjects directory. Also this comes down to preference, some like to group related classes in their own domain/directory. Like Shipping could be a directory and everything related to shipping within there and so on. I wouldn't definitely put everything under Services though, so good catch 👍
Hi Gio, I enjoyed this video. Learning further to simplify an application and make it easier to manage. But pls, why did we need to create the equalto() function? I didn't quite get that. Why do we need to compare the the other value object with the current value object? I understood the function, its the "why" I didn't get. Thanks a lot Gio.
You may need to compare two value objects. Having equal to method allows you to set how the objects can be compared. You can still compare them using == which will compare property values but as I mentioned it will do loose comparison. With custom equal to method you can do strict
In my view, DTO should called as Data Transformation Object as i see it was only doing transformation and not transfer. This is very similar to what we do in Data Warehousing using ETLs. I may be wrong.
Data transformers can also be another type of class. DTO is used for transferring data though can be used to transform as well, so in a way you could say DTO is also a transformer since it transforms arrays or unstructured data into structured objects. DTOs are also immutable and read-only.
Thank you so much for the amazing PHP courses you share online! Your tutorials have been a game-changer for me, and I can't express how much I’ve learned from your clear and practical explanations.
Your passion for teaching and your ability to simplify complex concepts have inspired me to keep growing as a developer. I'm so grateful for all the effort and dedication you put into helping people like me learn and improve.
Keep up the fantastic work-you’re making a real difference in the lives of so many aspiring developers!
Thank you for kind words 💙
After every lesson I feel lucky to be watching this wonderful course
Happy to hear that
Bro, you are amazing, your php 8 course is incredible, thank you very much for this gem.
Glad you like it, thank you 💙💙
I am very thankful you make such quality videos. Please keep making more videos on concepts like these, these are very helpful. I really feel like learning a lot in short time watching your videos.
Glad to hear that, thank you 🙏
19:18 This refactoring felt like the speed of light 🚀💪
Glad to hear 💙
You make great content. Thank You much. Your code style is highly elegant. I'm looking forward to form request, auth, authorization, middleware, and several most common patterns using in laravel
Thank you and thanks for suggestions 💙
Great video, Gio. Thank you!
Thank you 💙💙
awesome and fantastic. I might gonna use this reference someday. Immutable and side effect free values makes ease by making it less prone to bugs, don't know yet when to use the equalTo method for checking equality. But I might figure it out someday, thanks
Thank you
Thanks Sir 🙏, awesome content, it's cristal clear 👌
You're welcome
Thank you for the great content, Gio!
Thank you 💙
Hi! there is an additional 'i' in entity ! Have enjoyed this course to the fullest , would use it as reference for years to come!!
Hey, thank you so much 🙌. I didn't notice the typo, could you share the timestamp on where it is?
@@ProgramWithGio 8.40 & 20.46 respectively! Thank you for this wonderful series
@@manh9105 hahaha 🤣🤣, omg how did I not notice that. That looks so funny now 😂. Thank you 🙌 good eyes 👀
@@ProgramWithGio Most Welcome 😄
Thank you Gio.
No problem 💙💙
Pure Gold 🏆
Thank you
You are great teacher.
Thank you 🙌
Hi Gio, big thanks for these PHP tutorials. I have years of experience, but after these videos, I still learnt a lot and now much more confident.
Btw do you have any recommendations for similar types of videos for Javascript? I have watched Laracasts but looking for something different.
Thank you. I'm not involved much in the JS content to be honest so I'm not sure. I usually check traversymedia or laracasts.
Awesome video, thanks
Glad you liked it
Great Content
Thank you
I'm really excited about how introducing ORM crippled Entitites into some data-db objects, so you need to introduce things like Value Objects to heal your improper object design. "Entities are normally identified with ID" - yes? Since when? Entity is normal object with properties and methods. Like any other object. Just using ORM made them so. Even senior developers are crippling the OOP by using ORM and then using external "services" to implement methods, which should be integral to object (entity). And then adding artificial IDs to every entity, so no one really understand the code nor DB structure, because is full of IDs you don't really need for anything (because you have composite keys, right?).
To conclude this: you don't need any VO here. Simply use your entities and set their properties by other entities, like dimension etc. Sure, you can make them immutable, by default, or by method. Then your object of PackageDimnension class is valid for whole module, even for another entity, like Pallet. Then pick your pre-set PriceCounter, feed it with Package object and it will set the price. Then just pass the object into some kind of mapper to store value, that's it.
You make some good points & I partially agree, but Value Objects are a big part of DDD design and part of the PHP ecosystem, and so are entities. This is why I decided to cover it because new devs will eventually work with some sort of ORM or come across these terms and is important for them to know what they are and what is the difference. We covered Entities earlier in this series (within ORM & Doctrine/Symfony context) so explaining the difference in that context was important.
very good, Gio!
Thank you
Thanks for awesome video again. But at 21:15 does DTO has no id? i.e what if we have a DTO that represent a User model in laravel? User instance must have id then how come its DTO does not?
No DTO has no id. That is Entity, you would have User entity. DTO is just to pass data around so like take form request parameters create DTO and pass that DTO to a service class to create the User entity
@@ProgramWithGio thanks for your reply... But that seems to just 1 use case of DTO, there is another scenario where DTO can be used as api resource. There is a package called "spatie-laravel-data" which allows id property in DTO (check section "as-a-resource/from-data-to-resource" at its doc for detail).
@@free2idol1 sure, I just gave you one example since you asked. There are more uses for DTO for sure and API is one of them, I showed API example as well in the video.
I have not used that package, DTOs typically dont have an ID and business logic. If someone implemented it with ID it's up to them, maybe has a special use case.
@@free2idol1 I checked the package and they call those Data Objects and use it for multiple purposes. Within the "as DTO" section you will see there is no ID. So that package isn't just DTO, it's more like a multipurpose DTO.
@@ProgramWithGio Okay... it seems they've mixed 2 concepts (DTO and Entities) in that single package. Do you think so? Also, if I put `public ?$id` in the DTO, then what would be the consequence later on? And how to apply Entitiy concept in Laravel? or a Eloquent Model already represents an Entity?
do you plan on doing some videos on most common design patterns in php?
Maybe in the future.
Wow man! This is so so useful. Thank you so much! Please if you have time (and will), make a short series on DDD.
Glad you liked it, thank you. Unfortunately I don't follow DDD and don't know much about it. Maybe in future I can make a series about it & learn it myself along the way 👍. Thanks for the suggestion
@@ProgramWithGio We started to implement it in our legacy and it opened our eyes (almost literally). Everything makes much more sense.
@@pasizdobrekuce that's awesome
@@ProgramWithGio may I know why you don't prefer DDD and what architecture/ design method you often use in your development process? I am researching DDD and it seems articles about it on the internet is mainly theory-based.
@@free2idol1 it's not that I don't prefer, I typically do monoliths with a bit of microservices
Hi,, Thank you for a wonderful video & deep explanation about it.. It's really easy to understand..
May I know, what is the PHPStorm plugin that you using to make this sign '->', '===', etc pretty? I seen it in your another video..
It's not a plugin, I have font ligatures feature enabled in my IDE
Really helpful, thank you
Glad it was helpful, thank you 🙌
PHP design patterns stuff would be a nice addition if it's not already planned on the series. Very few resources on this on YT.
Thanks for the suggestion, no plans yet but it's in my list
Valuable lesson again, Gio,. Thank you.
In the code you kept the new enum, VO's and Service class together in a directory. Is that what you would normally do? I can see they are related and perhaps the only relevance for them is in that service, but you also created an enum directory in the app, so I wondered if there are rules in that you follow.
Good observation. I usually put them in their own directories like Data Objects and place value objects & DTOs there. I didn't pay attention to the folder structure in this lesson cause I probably got carried away talking 🙈. In the project section you will see that we will have DataObjects directory. Also this comes down to preference, some like to group related classes in their own domain/directory. Like Shipping could be a directory and everything related to shipping within there and so on. I wouldn't definitely put everything under Services though, so good catch 👍
Hi Gio, I enjoyed this video. Learning further to simplify an application and make it easier to manage. But pls, why did we need to create the equalto() function? I didn't quite get that. Why do we need to compare the the other value object with the current value object? I understood the function, its the "why" I didn't get. Thanks a lot Gio.
You may need to compare two value objects. Having equal to method allows you to set how the objects can be compared. You can still compare them using == which will compare property values but as I mentioned it will do loose comparison. With custom equal to method you can do strict
@@ProgramWithGio Ok Gio, I understand it better now. Thanks a lot.
In my view, DTO should called as Data Transformation Object as i see it was only doing transformation and not transfer. This is very similar to what we do in Data Warehousing using ETLs. I may be wrong.
Data transformers can also be another type of class. DTO is used for transferring data though can be used to transform as well, so in a way you could say DTO is also a transformer since it transforms arrays or unstructured data into structured objects. DTOs are also immutable and read-only.
@@ProgramWithGio Tq you for the clarification.
I suggest that you make Laravel course. Thank you
Thanks for the suggestion 💙
Thanks
You're welcome
Please also make a video on building middleware from scratch and its implementation without using any framework
Not planned currently but will add this to the list, thanks for the suggestion