Repository Pattern

แชร์
ฝัง

ความคิดเห็น • 109

  • @jojojawjaw
    @jojojawjaw 3 ปีที่แล้ว +84

    The first 25 seconds of this tutorial alone, does a better job explaining the repository pattern than a hundred other tutorials on TH-cam. This is the best tutorial on repository pattern.

    • @CodingConcepts
      @CodingConcepts  3 ปีที่แล้ว +1

      Thank you very much. I really appreciate it.

    • @sonictailsandsally
      @sonictailsandsally ปีที่แล้ว

      Seriously though!
      He get’s straight to the point!

  • @tsunamio7750
    @tsunamio7750 2 ปีที่แล้ว +9

    This is not simply an explanation on the repository pattern. This video reaches about so many principles that young engineers have a hard time acquiring.
    I already knew all of those concepts but never truly acquired them. You shine bright so strong on those concepts that I now not only understand them, but I also have intuition and instinct about looking out for improvements like those to decouple and reuse code.
    There is no code per se, yet it did serve as a wonderful example.

  • @guilherme-l-moraes
    @guilherme-l-moraes 2 ปีที่แล้ว +22

    The only problem with this channel is that it has only two videos. Please, post more! High-quality content, easily digestible explanations, and top-notch edition.
    You got one more subscriber.

    • @CodingConcepts
      @CodingConcepts  2 ปีที่แล้ว +5

      Thank you! I’m working on getting another one out.

  • @maretzelaltar7833
    @maretzelaltar7833 2 ปีที่แล้ว +2

    this is the only video where I was able to understand Repository Pattern. Short but the way the lesson is delivered is clear and easy to digest.

  • @infiniteloop5804
    @infiniteloop5804 ปีที่แล้ว +2

    I don't comment often on videos, but this video definitely deserves a THANK YOU!!

  • @jimbobwylie
    @jimbobwylie 6 หลายเดือนก่อน +1

    Why do you only have 2K subscribers?! This is the only one of at least 10 previous videos that has explained Repositories for a true beginner to understand! And this video is 3 years old. Thank you for this!

  • @jadawo
    @jadawo 3 ปีที่แล้ว +3

    One of the best explanations of design patterns I have ever seen. Keep up the great work

  • @mb3_media
    @mb3_media ปีที่แล้ว +1

    Man, that is the bet explication about that design pattern that I've seen. Thank you so much for your effort

  • @drewb9
    @drewb9 2 ปีที่แล้ว +1

    This was the best explanation of the Repository Pattern. Thank you for this.

  • @ItsNylrak
    @ItsNylrak 3 ปีที่แล้ว +13

    How does this guy don't have a million subs? Explains very well and is easy to understand, only thing I'd suggest is giving quick demo example in the video. Keep up the good work!

    • @ewomer100
      @ewomer100 ปีที่แล้ว +2

      He put up two videos and ghosted.

    • @ItsNylrak
      @ItsNylrak ปีที่แล้ว +2

      @@ewomer100 A year ago he seemed very promising ngl

  • @ricardoislasruiz3186
    @ricardoislasruiz3186 2 ปีที่แล้ว +1

    This is the best video about this topic I have found on TH-cam!

  • @Johnny-pf1ni
    @Johnny-pf1ni ปีที่แล้ว +1

    Great explanation on the Repository pattern. It makes so much sense to me now.

  • @dylan8389
    @dylan8389 2 ปีที่แล้ว +2

    Absolutely amazing video, as a relatively inexperienced developer I’m currently learning C# and this video has made complete sense to me.

  • @sonictailsandsally
    @sonictailsandsally ปีที่แล้ว +1

    Thank you! I had the gut feeling this vid would give me the answers I was looking for. Should have watched it first and saved time!

  • @JD-sn1lr
    @JD-sn1lr 2 ปีที่แล้ว +2

    In the Generic Implementation section, I think you wanted the IRepository to have a Find method of T entity Find(long id) because it will return the T type for any implementation and not just User

    • @CodingConcepts
      @CodingConcepts  2 ปีที่แล้ว

      You are right! Thank you for pointing that out! That was an oversight on my part.
      I’ll see if I can add a note at that part of the video to clarify things.
      Thanks again for letting me know!

  • @Knigh7z
    @Knigh7z 2 ปีที่แล้ว +6

    In DDD your repositories should be per aggregate rather than business object. An aggregate may be a business object but it may be more than just one, depending on your needs to enforce consistency during a write. This usually works well with the repository as you'll open a transaction as part of the repository operation.

  • @andreigudumac4328
    @andreigudumac4328 2 ปีที่แล้ว +3

    Hoping that you make some more videos on design patterns. Thank you. Keep up the good work!

  • @SuhasBharadwajK
    @SuhasBharadwajK ปีที่แล้ว +1

    This is such high-quality content, man! Superb production. You deserve tons of more subscribers. Maybe pushing more videos every week will do the trick.

  • @yellowswordg
    @yellowswordg 3 ปีที่แล้ว +3

    Keep them coming. People will love your tutorials!

  • @balu.92
    @balu.92 2 ปีที่แล้ว +2

    Best tutorial ever! So much explained in so little! ❤️

  • @naelshichida7940
    @naelshichida7940 2 ปีที่แล้ว +1

    Hey man, thanks so much for this. Me, Dom and Max love your work.

  • @shywn_mrk
    @shywn_mrk 2 ปีที่แล้ว +1

    I just found this video and your channel. Please continue your amazing work again and keep creating these kind of content 💪🏻

  • @Ajith4u81
    @Ajith4u81 3 ปีที่แล้ว +1

    Best video i ever heard about the Repository pattern

  • @jasontaylor8304
    @jasontaylor8304 ปีที่แล้ว +1

    Awesome video! Very clean and clear and explanation is spot on.

  • @slowmollyfar
    @slowmollyfar ปีที่แล้ว +1

    Thanks a lot for these explanations, illustrations nice as well

  • @abymathew575
    @abymathew575 2 ปีที่แล้ว +1

    really good video with good diagrams. Expecting more videos from you.

  • @AkhmadKhanifZyen
    @AkhmadKhanifZyen 2 ปีที่แล้ว +1

    this is high quality concepts, too bad this channel ended up only with 2 videos. i still waiting for another concepts. keep up the good work.

    • @CodingConcepts
      @CodingConcepts  2 ปีที่แล้ว +1

      Thanks! I’m working on another video. Apologize for the delay!

    • @Zoreens
      @Zoreens 2 ปีที่แล้ว +1

      @@CodingConcepts :D

    • @CodingConcepts
      @CodingConcepts  2 ปีที่แล้ว

      @@Zoreens I’m working on one. Promise 🙂

  • @nagamahesh656
    @nagamahesh656 2 ปีที่แล้ว +2

    Crystal Clear Explanation.

  • @MsLiberanimus
    @MsLiberanimus 2 ปีที่แล้ว +1

    the best explanation ever 🙌🙌🙌

  • @arsenhakobyan00
    @arsenhakobyan00 2 ปีที่แล้ว +2

    This is such a great video. I'm so glad I found your channel. Are you planning on creating more videos like this?

  • @doointhedoo
    @doointhedoo ปีที่แล้ว +1

    Great videos. Subscribed. Would like to see more industry real life examples. Especially this part ( 10:46 ).

  • @twentxx
    @twentxx ปีที่แล้ว +1

    Man, this is very good video
    Thank you 😊
    We will waiting for your videos

  • @pheroqt1238
    @pheroqt1238 3 ปีที่แล้ว +5

    Hey, are you planning to continue on design patterns (and other topics) in this channel? Really nice explanations!

    • @CodingConcepts
      @CodingConcepts  3 ปีที่แล้ว +7

      Appreciate the nice comment.
      I am working on another video. Just takes me some time because it’s something I do in my spare time and I’ve been busy at work.
      I plan on going through the DDD concepts first and take it from there.

  • @harshpatel105
    @harshpatel105 2 ปีที่แล้ว +1

    Amazing video

  • @paulstanley2789
    @paulstanley2789 3 ปีที่แล้ว +3

    Great video.I hope you can make some more.

  • @mohamedQ
    @mohamedQ 2 ปีที่แล้ว +1

    nice and easy to understand straight to the point thx a lot

  • @zeshanrabnawaz1699
    @zeshanrabnawaz1699 2 ปีที่แล้ว +1

    Great Job Buddy ......

  • @shaharts8333
    @shaharts8333 3 ปีที่แล้ว +1

    Great video boss👍💥👌

  • @benisrood
    @benisrood 2 หลายเดือนก่อน

    This is your brain on Java and "industrial programming".

  • @bokunochannel84207
    @bokunochannel84207 2 ปีที่แล้ว +1

    awesome content, more about design pattern please.

  • @javierolazaran7227
    @javierolazaran7227 3 ปีที่แล้ว +1

    Loved the topic and the explanation.

  • @emirhansoylu
    @emirhansoylu 3 ปีที่แล้ว +1

    Wow, this is amazing work. Thank you!

  • @ashishchandra4078
    @ashishchandra4078 ปีที่แล้ว +1

    Great explanation , thank you :)

  • @kieljnsz
    @kieljnsz 7 หลายเดือนก่อน

    Thanks man! Please post more

  • @nilpunch2
    @nilpunch2 3 ปีที่แล้ว +1

    You are cool, make more videos like this, and your channel will grow very quickly!

  • @juanavalo
    @juanavalo 2 ปีที่แล้ว +1

    Great video!

  • @noblenetdk
    @noblenetdk ปีที่แล้ว +1

    impressingly precise and consice. Haven't seen this explained that clear before. Do the pattern have any drawbacks? Keep up the good work!

    • @CodingConcepts
      @CodingConcepts  ปีที่แล้ว

      Interesting question! I haven't thought about it from this context.
      There isn't an obvious tradeoff or drawback that comes to mind. I would say the biggest debate I've seen regarding the pattern has delt with specific implementations.
      Particularly when injecting an Object Relational Mapper (ORM) such as Entity Framework, which already implements the Repository Pattern (with unit of work) itself and will lead to code duplication and violation of the DRY principle (Don't Repeat Yourself).

    • @pictzone
      @pictzone ปีที่แล้ว +1

      @@CodingConcepts Why would you inject an ORM if you already created a custom data access layer with the repository pattern? The only reason I see where you would reach such a situation is if your main data access is already an ORM and you also integrate your own repository for more custom work. Wouldn't this scenario only create complementary code, thus not violating the DRY principle? (i mean it's still not 100% DRY, but still reasonably well)

    • @CodingConcepts
      @CodingConcepts  ปีที่แล้ว

      ​@@pictzone Great question!
      There is no definitive answer to this and it really comes down to the trade-offs you're willing to accept.
      I find myself writing my own repository classes because I find it makes my code much more testable. I'm a strong advocate for Test Driven Development (TDD) and I believe good code is testable code.
      By writing my own repositories, I'm able to easily mock their return values with testing tools such as Moq.
      I'm able to reduce the duplicate code it creates, which you've correctly identified, by using generic repositories in a lot of cases.
      ORM tools do provide in memory testing tools, but I just don't find the usability as streamlined as Moq.
      So for me, I find the trade off of increased testability at the cost of some duplication acceptable.

  • @InfoAufArabisch
    @InfoAufArabisch 9 หลายเดือนก่อน +1

    Could you please elaborate more about the test problem at 02:24 till 02:45? I don't understand how this makes it harder to write a test

    • @CodingConcepts
      @CodingConcepts  9 หลายเดือนก่อน

      Of course!
      At 2:24 I was trying to illustrate a scenario where a lot of logic resides in the controller. When you see "thick" or "bulky" controllers like this, it becomes very difficult to test your code because of the dependencies these controllers are using. ie: a database.
      The design at 2:45 is improved because it moves the database dependency out of the controller and into the repository. This puts us in a position to use a Mock for our repository to better target the specifc area of code we're looking to test.
      Hope this answers your question. Happy Coding!
      Rob

  • @kislayapant6119
    @kislayapant6119 2 ปีที่แล้ว +1

    Great explanation. Just one suggestion, please do not use Uppercase everytime. It is sometimes very hard to read the content displayed over the screen.

  • @josephthecreator
    @josephthecreator 2 ปีที่แล้ว +1

    Amazing video, thank you.

  • @alexaugusto5935
    @alexaugusto5935 2 ปีที่แล้ว +1

    In case the data comes from another application, like from another REST API.
    Can the implementation of the Repository, be the consumer client of the REST API?
    Or Repository Pattern only applies to something like Databases?

    • @CodingConcepts
      @CodingConcepts  2 ปีที่แล้ว +2

      You’re typically going to be using the repository pattern in conjunction with a database or some other data store.
      You could receive data from a REST Api such as a CustomerId to then fetch additional information about that customer using a repository.
      I hope that clears things up for you.

  • @andrey_aka_skif
    @andrey_aka_skif ปีที่แล้ว +1

    The Repository pattern seems simple. Great! I need to implement it in my project! I'm making it. Fabulous! Wait... I need filters... Damn. What I should do? Should I add filtering methods to the repository? It is a bad idea. I need to read the Internet. Hmm... CQRS? Now I have to use the Repository only to update the business object. To get composite data I have to use Queries. They are not so clean anymore. They usually know about the database type. What's the result? The simple idea of a Repository results in a complex mess of Repositories and Queries. Usually there is also a Unit of Work running nearby. What do you think about compound queries in the context of the Repository?

    • @CodingConcepts
      @CodingConcepts  11 หลายเดือนก่อน +1

      For most cases it’s usually acceptable to have different method definitions.
      -FindByName
      -FindByEmail
      -FindByPhone
      etc..
      If your query is particularly complex, or it needs to be used in other areas of the system, typically complex business logic, you may want to look into the specification pattern.
      In short, you would encapsulate the query logic inside the specification object, and then inject that specification wherever needed, in this case, a repository.
      Happy Coding!
      Rob

  • @newagene8276
    @newagene8276 ปีที่แล้ว +1

    What can be done for other complex operation how to segregate those in terms of repositories? outrside crud we might need more methods in a large software

    • @CodingConcepts
      @CodingConcepts  ปีที่แล้ว

      Take a look at the specification pattern

  • @ahmeda.algily4998
    @ahmeda.algily4998 3 ปีที่แล้ว +1

    Wow , just wow 👏👏

  • @pgbpro20
    @pgbpro20 2 ปีที่แล้ว +1

    Very helpful! Flexibility is spelled wrong throughout haha.

  • @ksdekamil
    @ksdekamil 3 ปีที่แล้ว +1

    great job

  • @sanamjha1209
    @sanamjha1209 3 ปีที่แล้ว +1

    eagerly waiting new video.

  • @nikhilgoyal007
    @nikhilgoyal007 2 ปีที่แล้ว +1

    thanks very much!

  • @egor.cleric
    @egor.cleric ปีที่แล้ว +1

    What about aggregation root?

  • @utkachannel4411
    @utkachannel4411 2 ปีที่แล้ว +1

    wow, thank you very much !

  • @rasimatics
    @rasimatics 2 ปีที่แล้ว +1

    Great!!!

  • @feoktant
    @feoktant 3 ปีที่แล้ว +1

    Are you sure about generic interface repo? Not all repositories should look like this. Some business objects should not be deleted, other should not be updated.

    • @CodingConcepts
      @CodingConcepts  3 ปีที่แล้ว +1

      I agree. Not trying to make the argument that a generic repository is best in all cases. Just trying to show different strategies and implementations. Appreciate your comment.

  • @lorenzosala3527
    @lorenzosala3527 3 ปีที่แล้ว +1

    Thank you so much!

  • @alexgavidia7356
    @alexgavidia7356 2 ปีที่แล้ว +1

    The best!
    Thanks

  • @pawekoaczynski4505
    @pawekoaczynski4505 3 ปีที่แล้ว +1

    just the video I needed, thanks c:

  • @TramoTech
    @TramoTech 2 ปีที่แล้ว +1

    👍

  • @yaulinfung9615
    @yaulinfung9615 3 ปีที่แล้ว +1

    keep it up!

  • @m3hdim3hdi
    @m3hdim3hdi ปีที่แล้ว

    what is the difference between the DAO and the Repository pattern?

    • @CodingConcepts
      @CodingConcepts  ปีที่แล้ว

      There is a pretty good discussion I had in the comments about this with another viewer. I linked the comment below. Let me know if that clears things up.
      th-cam.com/video/x6C20zhZHw8/w-d-xo.html&lc=UgwoV2MDbSnxx_sXtFR4AaABAg

    • @titobundy
      @titobundy 7 หลายเดือนก่อน

      @@CodingConcepts I don't see the discussion. Is the url correct?

    • @CodingConcepts
      @CodingConcepts  7 หลายเดือนก่อน +1

      @@titobundy Sorry about that. I'm not seeing the comment any more. I will post the discussion here.
      Question: I might be confused but i find this pattern really similar to the use of Data Access Objects. Are there any differences ? Should we be using one over the other ?
      Reply: A Data Access Object (DAO) is all about data persistence. It will sit below the Repository, and will match one to one with an underlying database table or view. It's an object representation of the underlying data schema. It's logicless.
      The return type of a repository is going to be an Entity or Aggregate which are business objects. They may closely resemble the underlying data schema, but you're getting business objects back. Which will have some form of business logic in them.
      In general, you'll see DAOs used in more complex architectures, to handle specific persistence requirements.
      Question: So if i understood correctly, they are used together and DAO will return data as JSON for example, when Repository will cast it to Business objects (and perform other operations) ?
      Do you have some tips on how to know if we should use DAO, repository or both ?
      Reply: A repository is an abstraction of a collection of objects.
      A DAO is an abstraction of data persistence.
      A UserRepository should only ever return User. It shouldn't for example return a RoleObject.
      A UserDAO on the other hand, it would be acceptable to return information about a User and have another method to return information about it's Roles. As it's only concern is how the information is persisted/stored in the database. The key thing to note here is it's just returning data for you.
      A good use case for a DAO would be when the underlying data schema is very complex. Perhaps, that UserObject needs several database operations behind the scenes to construct. Put logic like that in a DAO, not a Repository.
      An Object Relational Mapper (ORM) such as Entity Framework, is going to eliminate the need for a DAO in most cases. It's going to do most of that work for you.

    • @titobundy
      @titobundy 7 หลายเดือนก่อน +1

      @@CodingConcepts Thank for your post. I would like to have your point of view. Do you think tools like TypeOrm or Spring Data, which apply the repository pattern, do so according to Martin Fowler's definition in his book Refactoring or perhaps Eric Evans in his book DDD, or do you think such implementations are closer to what DAO offers?

    • @CodingConcepts
      @CodingConcepts  7 หลายเดือนก่อน +1

      @@titobundy I can't speak specifically to TypeOrm or SpringData as I haven't used those tools before, I mainly use Entity Framework.
      But in general, I would say both. Modern ORM's are applying the repository "by the book" but are also becoming exceptionally well at mapping complex data objects.
      I would expect the need for a DAO layer to decrease over time.

  • @ruslanustiuhov5510
    @ruslanustiuhov5510 3 ปีที่แล้ว +1

    nice one!

  • @stevenkjames
    @stevenkjames 2 ปีที่แล้ว +1

    Cool

  • @abdelrahmanmoubarak7934
    @abdelrahmanmoubarak7934 3 ปีที่แล้ว +1

    That's really great

  • @futsuchinpo9892
    @futsuchinpo9892 4 หลายเดือนก่อน +1

    thanks man

    • @CodingConcepts
      @CodingConcepts  4 หลายเดือนก่อน

      You’re welcome!

    • @futsuchinpo9892
      @futsuchinpo9892 4 หลายเดือนก่อน +1

      @@CodingConcepts woah you still active on TH-cam ? Nice

    • @CodingConcepts
      @CodingConcepts  4 หลายเดือนก่อน

      Yup 🙂

  • @andianwar5784
    @andianwar5784 ปีที่แล้ว +1

    come back bro

  • @yosiyosiro3866
    @yosiyosiro3866 2 ปีที่แล้ว +1

    I sub

  • @iMaxos
    @iMaxos 3 ปีที่แล้ว +1

    GOLD

  • @CandiceWilliams_
    @CandiceWilliams_ ปีที่แล้ว

    I wish I had more time to pick this up so I know how to communicate with my devs and explain how I need to be able to access payment history and user referrals with my flutter app so I can create reports to keep my affiliates and stockholders up to date… if any one has any tips please share. I appreciate you so much in advance.