Value Objects Practical Example - What is a Value Object? - Full PHP 8 Tutorial

Поделиться
HTML-код
  • Опубликовано: 5 янв 2025

Комментарии • 80

  • @megyptmEgy
    @megyptmEgy 10 дней назад

    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!

  • @mwaas
    @mwaas Год назад +1

    After every lesson I feel lucky to be watching this wonderful course

  • @andersoncdz1
    @andersoncdz1 2 года назад +4

    Bro, you are amazing, your php 8 course is incredible, thank you very much for this gem.

  • @aryank8695
    @aryank8695 2 года назад +6

    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.

  • @benderbg
    @benderbg 3 месяца назад

    19:18 This refactoring felt like the speed of light 🚀💪

  • @SerhiiDorn
    @SerhiiDorn 2 года назад +4

    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

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      Thank you and thanks for suggestions 💙

  •  2 года назад +2

    Great video, Gio. Thank you!

  • @stephen.cabreros
    @stephen.cabreros Год назад

    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

  • @chlouis-girardot
    @chlouis-girardot 2 года назад +1

    Thanks Sir 🙏, awesome content, it's cristal clear 👌

  • @OlayDede
    @OlayDede 2 года назад

    Thank you for the great content, Gio!

  • @manh9105
    @manh9105 2 года назад +1

    Hi! there is an additional 'i' in entity ! Have enjoyed this course to the fullest , would use it as reference for years to come!!

    • @ProgramWithGio
      @ProgramWithGio  2 года назад

      Hey, thank you so much 🙌. I didn't notice the typo, could you share the timestamp on where it is?

    • @manh9105
      @manh9105 2 года назад

      @@ProgramWithGio 8.40 & 20.46 respectively! Thank you for this wonderful series

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      @@manh9105 hahaha 🤣🤣, omg how did I not notice that. That looks so funny now 😂. Thank you 🙌 good eyes 👀

    • @manh9105
      @manh9105 2 года назад

      @@ProgramWithGio Most Welcome 😄

  • @memack101
    @memack101 2 года назад

    Thank you Gio.

  • @vegekou100
    @vegekou100 Год назад

    Pure Gold 🏆

  • @MuratUysal
    @MuratUysal 2 года назад

    You are great teacher.

  • @MayankJaniOfficial
    @MayankJaniOfficial 6 месяцев назад

    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.

    • @ProgramWithGio
      @ProgramWithGio  6 месяцев назад

      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.

  • @AMoktar
    @AMoktar Год назад

    Awesome video, thanks

  • @elmarzougui
    @elmarzougui 2 года назад

    Great Content

  • @IvanVlk
    @IvanVlk 2 года назад +2

    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.

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      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.

  • @SlainR2
    @SlainR2 2 года назад

    very good, Gio!

  • @free2idol1
    @free2idol1 2 года назад

    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?

    • @ProgramWithGio
      @ProgramWithGio  2 года назад

      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

    • @free2idol1
      @free2idol1 2 года назад +1

      @@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).

    • @ProgramWithGio
      @ProgramWithGio  2 года назад

      @@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.

    • @ProgramWithGio
      @ProgramWithGio  2 года назад

      @@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.

    • @free2idol1
      @free2idol1 2 года назад

      @@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?

  • @pusikurac986
    @pusikurac986 2 года назад +4

    do you plan on doing some videos on most common design patterns in php?

  • @pasizdobrekuce
    @pasizdobrekuce 2 года назад

    Wow man! This is so so useful. Thank you so much! Please if you have time (and will), make a short series on DDD.

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      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

    • @pasizdobrekuce
      @pasizdobrekuce 2 года назад +1

      @@ProgramWithGio We started to implement it in our legacy and it opened our eyes (almost literally). Everything makes much more sense.

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      @@pasizdobrekuce that's awesome

    • @free2idol1
      @free2idol1 2 года назад

      @@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.

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      @@free2idol1 it's not that I don't prefer, I typically do monoliths with a bit of microservices

  • @mohdsyafiqjohar6883
    @mohdsyafiqjohar6883 7 месяцев назад

    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..

    • @ProgramWithGio
      @ProgramWithGio  7 месяцев назад

      It's not a plugin, I have font ligatures feature enabled in my IDE

  • @josechirino5168
    @josechirino5168 2 года назад

    Really helpful, thank you

  • @codingzen869
    @codingzen869 2 года назад

    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.

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      Thanks for the suggestion, no plans yet but it's in my list

  • @hansschuijff
    @hansschuijff 2 года назад

    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.

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +3

      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 👍

  • @Zubbee
    @Zubbee 2 года назад +1

    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.

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      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

    • @Zubbee
      @Zubbee 2 года назад

      @@ProgramWithGio Ok Gio, I understand it better now. Thanks a lot.

  • @truthteachers
    @truthteachers Год назад

    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.

    • @ProgramWithGio
      @ProgramWithGio  Год назад +1

      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.

    • @truthteachers
      @truthteachers Год назад +1

      @@ProgramWithGio Tq you for the clarification.

  • @Abdulrahman-my3tu
    @Abdulrahman-my3tu 2 года назад +3

    I suggest that you make Laravel course. Thank you

  • @devcast6414
    @devcast6414 2 года назад

    Thanks

  • @rxxt-sh1vj
    @rxxt-sh1vj 2 года назад

    Please also make a video on building middleware from scratch and its implementation without using any framework

    • @ProgramWithGio
      @ProgramWithGio  2 года назад +1

      Not planned currently but will add this to the list, thanks for the suggestion