Mateus Guimarães
Mateus Guimarães
  • Видео 97
  • Просмотров 356 125
The most powerful way to use Eloquent
Persist: github.com/mateusjatenee/persist
👨‍💻 Learn Test-Driven Development with Laravel!
tddwithlaravel.com
Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com
👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis:
subscribe.mateusguimaraes.com
🎉 Party up:
mateusjatenee/
mateusjatenee
www.linkedin.com/in/mateusguimaraes/
Thanks for watching!
Просмотров: 3 824

Видео

How to Scale Web Applications
Просмотров 1,2 тыс.Месяц назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
Thinking about Aggregates in Active Record
Просмотров 2,5 тыс.2 месяца назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
How to properly integrate with 3rd party providers
Просмотров 1,9 тыс.3 месяца назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
What I do before coding complex features
Просмотров 1,9 тыс.4 месяца назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
DDD is not about code
Просмотров 1,3 тыс.4 месяца назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
Laravel Internals: Eloquent Query Builder & Relations
Просмотров 8916 месяцев назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
An introduction to Laravel's Eloquent internals
Просмотров 1,9 тыс.7 месяцев назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
Why is Javascript so advanced yet behind?
Просмотров 9117 месяцев назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
Dissecting Laravel Pulse
Просмотров 2,2 тыс.7 месяцев назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
Laravel Core 101
Просмотров 2,6 тыс.7 месяцев назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
Using fake objects in automated tests
Просмотров 2,2 тыс.8 месяцев назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
Memory Management & Garbage Collection
Просмотров 1,3 тыс.8 месяцев назад
* Although I say return memory to the operating system, that isn't necessarily what happens. malloc() and free() are library calls that offer some abstraction on top of syscalls. malloc() and free() interact with the memory allocator/heap, which may in turn interact with the system. The underlying syscalls are somewhat expensive, and the memory allocator will try to avoid making these calls unl...
How associative arrays work internally
Просмотров 1,6 тыс.9 месяцев назад
👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis: subscribe.mateusguimaraes.com 🎉 Party up: mateusjatenee/ mateusjatenee www.linkedin.com/in/mateusguimaraes/ Thanks for watching!
PHP-FPM vs Swoole execution model
Просмотров 5 тыс.9 месяцев назад
Note: I used async I/O and non-blocking I/O interchangeably, but they're not the same thing. Async I/O is a way to implement non-blocking I/O. Note 2: I'm sorry some words are cutting off. I had my preamp improperly configured. 👨‍💻 Learn Test-Driven Development with Laravel! tddwithlaravel.com Sign up to 30 Days of Laravel 👉🏻 30daysoflaravel.com 👨‍💻 Sign up to my newsletter and receive PHP, JS ...
Event-Driven Architecture
Просмотров 1,7 тыс.9 месяцев назад
Event-Driven Architecture
Implementing a Command Bus
Просмотров 1,3 тыс.10 месяцев назад
Implementing a Command Bus
The Command Pattern
Просмотров 1,8 тыс.10 месяцев назад
The Command Pattern
Understanding and implementing Value Objects
Просмотров 1,3 тыс.Год назад
Understanding and implementing Value Objects
Implementing Laravel Facades from SCRATCH!
Просмотров 2,2 тыс.Год назад
Implementing Laravel Facades from SCRATCH!
Implementing our own DI container with TDD - Part 4
Просмотров 578Год назад
Implementing our own DI container with TDD - Part 4
Implementing our own DI container with TDD - Part 3
Просмотров 620Год назад
Implementing our own DI container with TDD - Part 3
Implementing our own DI container with TDD - Part 2
Просмотров 781Год назад
Implementing our own DI container with TDD - Part 2
Implementing our own DI container with TDD - Part 1
Просмотров 2,2 тыс.Год назад
Implementing our own DI container with TDD - Part 1
Thinking about modules and boundaries when writing software
Просмотров 775Год назад
Thinking about modules and boundaries when writing software
Your application does NOT need to scale
Просмотров 2,9 тыс.Год назад
Your application does NOT need to scale
Laravel Queues Lesson 3 - Laravel Horizon: setting it up, load balancing & handling logs
Просмотров 6 тыс.Год назад
Laravel Queues Lesson 3 - Laravel Horizon: setting it up, load balancing & handling logs
Laravel Queues Lesson 2 - Failed jobs: listing, retrying and handling them
Просмотров 5 тыс.Год назад
Laravel Queues Lesson 2 - Failed jobs: listing, retrying and handling them
Laravel Queues Lesson 1 - Understanding queues and workers and manipulating the queue
Просмотров 9 тыс.Год назад
Laravel Queues Lesson 1 - Understanding queues and workers and manipulating the queue
Understanding queues & background processing
Просмотров 7 тыс.Год назад
Understanding queues & background processing

Комментарии

  • @gui1gear
    @gui1gear 5 дней назад

    What shortcuts are you using in phpstorm with vim?

    •  4 дня назад

      Mostly just jumping lines

    • @gui1gear
      @gui1gear 4 дня назад

      Não fui bem claro kkk… Queria saber se você mudou os shortcut da ide, pois no meu phpstorm ele fica avisando que tá dando conflito de shortcuts por causa do plugin do vim.

    •  2 дня назад

      @@gui1gear não mudei nada não, que tipo de shortcut vc tá falando? eu entro no normal mode e uso os comandos do vim normalmente

  • @mahdibouguerzi
    @mahdibouguerzi 6 дней назад

    Great video 👍 ! but what will i miss if i used DB::transaction ?

    •  4 дня назад

      You’d have to save each “piece” of the aggregate as separate entities, individually

  • @LileshJadav
    @LileshJadav 6 дней назад

    How about increased memory Usage? Because most developers don’t think about optimisation.

    •  4 дня назад

      Memory usage would be the same as persisting each model individually.

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

    This is such an interesting video, I'm working with a bunch of business logic that has executes commands on remote Linux servers (its a backup tool, so it takes files from ubuntu servers and sticks them on S3 buckets etc), and mocking it has been a frustrating experience. It doesn't inspire confidence when your script breaks and your tests are just happily passing like nothing happened due to it being so heavily mocked. 🤦 I'll have to try using fake objects in a small portion and see how I get on. Thank you Mateus!

    •  10 дней назад

      I’m glad I could be of help!

  • @neverything
    @neverything 14 дней назад

    Great video Mateus, thanks for sharing

    •  13 дней назад

      Glad you enjoyed it my friend!

  • @learn-web-dev
    @learn-web-dev 14 дней назад

    Great Doctrine idea :)

  • @bobbyiliev_
    @bobbyiliev_ 15 дней назад

    Great video! Well done!

    •  13 дней назад

      Glad you liked it Bobby!

  • @vladvasilov
    @vladvasilov 15 дней назад

    nice! This is somehow similar to MikroORM persist

    •  13 дней назад

      Oh cool! I’ll check it out.

  • @DaviMartins99
    @DaviMartins99 15 дней назад

    I wish that Taylor left you some feedback on why not merging this instead of just closing with the auto message, guess it was because it's pretty big change to the Eloquent-way of thinking. Great idea for a package nevertheless, can see myself pulling this if the right scenario comes up.

    •  13 дней назад

      I think it was a fair response! Eloquent is very complex and it’s a critical piece, so I understand that changing how it behaves is complicated.

  • @nexxai
    @nexxai 15 дней назад

    Wow. This is awesome! It makes so much sense regarding consistency and I think I'm going to be spending some time over the next week bringing it into my latest side project. Thanks for doing this!

    •  15 дней назад

      Let me know what you think!

  • @joshcirre
    @joshcirre 15 дней назад

    This is awesome. Thanks for teaching me. :)

    •  15 дней назад

      Thanks for watching my dude!

  • @piter33
    @piter33 15 дней назад

    Great idea, Mateus! I'll try it. I think this is worth a PR in Laravel 😉

    •  15 дней назад

      The package came from a PR! :-) github.com/laravel/framework/pull/48914

  • @inspiway6424
    @inspiway6424 15 дней назад

    Nice, I had no idea about that "persist" method. Thx!

  • @Ruggie1of1
    @Ruggie1of1 15 дней назад

    push() exists on models already and is intended to save the model and relationships. (still a good idea to call it inside of a transaction)

    •  15 дней назад

      Sadly it doesn’t always work - push assumes that models have been persisted already. See: github.com/laravel/framework/issues/48914

  • @giantsquirrels
    @giantsquirrels 22 дня назад

    Thanks for this! I really struggle with testing code that interacts with third party services, I'm not the best at mocking so its such a headache.

    •  19 дней назад

      Hopefully this helps!

  • @lo_fye
    @lo_fye 23 дня назад

    The whole point is that you get to abstract away where and how the data is stored. That's why it's a Repository, not a Service etc. I'm using Repositories in Laravel to pull in data from CSVs, APIs, MS-SQL, and MySQL, and the code to read and write that data is identical, regardless of the source / storage and retrieval mechanism. I can iterate over different repositories, calling the same methods on each of them, for example. In a sense, the Interface of the Repository is the most important part; the key abstraction layer.

  • @cwell549
    @cwell549 Месяц назад

    Great video! How would you use docker to containerize something like this?

    •  Месяц назад

      Thanks! I’d just set up individual containers for each service. In production, caching/DB would likely be managed, so one less thing to worry about. 👍

  • @munandisichali605
    @munandisichali605 Месяц назад

    As much you did other videos on the topic, I think you can minimize referring to the other video now and then, you can just explain the topic and we move on

    •  Месяц назад

      thanks

  • @swancompany_inc
    @swancompany_inc Месяц назад

    This was a great video. Just what I needed to solve a problem I've been having. Thanks Mateus!

    •  Месяц назад

      Glad you liked it!

  • @TonyMessias
    @TonyMessias Месяц назад

    Great video! One thing worth mention is that the model will likely change when we're switching from a sync vs. async approach. For instance, the Order approach, if it was sync, we could create the Order model only after the credit card processing succeeded (or maybe just commit the transaction then). But if you're going *async*, you'd probably need to create a *pending Order* that would be sent to the ProcessOrder job, which would run in background, and would update the Order and notify the customer afterward... something like that. So, going from sync to async (and vice versa, I guess) causes domain changes too.

    •  Месяц назад

      100%! Error handling would massively change too. Appreciate the comment dude. Thanks for adding some info!

  • @MT87840
    @MT87840 Месяц назад

    Great video, go ahead Mateus!

    •  Месяц назад

      Thank you!

  • @kurshadqaya1684
    @kurshadqaya1684 Месяц назад

    Wow. It is first time I see something like that. It is unique. Everybody talks about microservices and blah blah. But before switching to microservices, very few people talk. Good for you!

    •  Месяц назад

      Yup! Glad you liked it.

  • @marioniko4714
    @marioniko4714 Месяц назад

    great vid, people need to realize this is the kind of stuff that matters when talking about scale, not just the req/sec your js framework can handle.

    •  Месяц назад

      Ty!

  • @jobayertuser
    @jobayertuser Месяц назад

    It's really awesome concept

  • @bb-gi9ky
    @bb-gi9ky 2 месяца назад

    $command->customer->id, $order->payment->customer etc violate encapsulation

    •  2 месяца назад

      How would you do it?

  • @safara_umarov
    @safara_umarov 2 месяца назад

    really great video. thank you a billion. keep it going

    •  Месяц назад

      Thanks, will do!

  • @abdallakaram5376
    @abdallakaram5376 2 месяца назад

    Great

  • @mariano.pualiu
    @mariano.pualiu 2 месяца назад

    I read about Aggregates from DDD a long time ago, and didn't quite figured out them for Laravel ORM (I think it is mostly a thing for Data Mapper) but this helped me to make it sink properly, thank you, still not quite sure why you have `Ticket` and `OrderTicket` Models, and why you pass a `Ticket` to the `addTicket` method and it creates an `OrderTicket` is `Ticket` kind of a ValueObject or a DTO?

    •  2 месяца назад

      A "Ticket" is part of the Event aggregate, an "OrderTicket" is part of the Order aggregate (maybe OrderLine would've been a better name). In a modular context, they'd both have the same name in different contexts. e.g Order\Ticket and Event\Ticket.

  • @itiskawsar
    @itiskawsar 2 месяца назад

    Love this video, want more content like this in the future. Thanks.

    •  2 месяца назад

      Glad you enjoyed it!

  • @Super_Motiviation_G
    @Super_Motiviation_G 2 месяца назад

    how to modify x-app-layout could u make a video

  • @necrotikS
    @necrotikS 2 месяца назад

    You probably won't have a ton of line items, however, what if you're dealing with a domain model that could have a lot of "line items"? If you keep pushing into the array, you'll run out of memory. But this is not a "domain" problem. How to solve this?

    •  2 месяца назад

      I can’t think of a lot of scenarios where you’d have to save a bunch of stuff together in one go. In these cases I’d probably just queue it afterwards, and leave the aggregate root in a pending state until that is done. Do you have a concrete example?

  • @user-iu4cr1cl7g
    @user-iu4cr1cl7g 2 месяца назад

    Great video thanks Mateus!

    • @user-iu4cr1cl7g
      @user-iu4cr1cl7g 2 месяца назад

      Doing this before every feature or even every work item that is more than just a couple hours of effort would build a great habit and save myself some future stress!

  • @turboclown
    @turboclown 2 месяца назад

    Love your channel and videos, I am learning something new with every one. And I always think about how this could benefit my code base. Thank you!

    •  2 месяца назад

      Thay’s a very kind message. Thank you so much, you’ve made my day!

  • @ksiaoussema9916
    @ksiaoussema9916 2 месяца назад

    rojla rak ,9adekech ksouh ya m3allam !

  • @Competitiveforlolz
    @Competitiveforlolz 2 месяца назад

    Just use the data mapper pattern lol, active record is such an anti pattern.

  • @lpheller
    @lpheller 2 месяца назад

    Great video. Thanks for sharing these thoughts. With things like OrderLines - which actually only exist within the order - what do you think of the approach of denormalizing the data structure and not storing it in a separate database table but as embedded entities? This would possibly solve some "problems" with persistence (and of course bring new challenges^^). Keep up the good work. I really enjoying your content.

    •  2 месяца назад

      Hey! Thanks for the comment. I’m not sure what do you mean with “embedded entities” - do you mean storing it alongside the order row? If so, I’m not sure - RDBMS are meant for this and persistence/consistency should not be an issue. I can see that working with good JSON support though (e.g Postgres).

    •  2 месяца назад

      Although you’d have very limited querying abilities against line items.

  • @saralightbourne
    @saralightbourne 2 месяца назад

    oh god this is perfect. i'm a django developer and i've suffered these issues a lot. i tried learning DDD but couldn't get anything because i was thinking domain models = orm models. but it all made sense in the first 5 minutes of your video. thank uuuuu

    •  2 месяца назад

      Happy to be of help 🫡

  • @lassestube
    @lassestube 2 месяца назад

    This kind of more intermediate/advanced content is dearly missed on youtube! Great explanation and example, albeit simplified does illustrate the issue and possible solution in an eloquent way.. i mean elegant 😂

    •  2 месяца назад

      Thank you my dude 🫶🏻

  • @bled72
    @bled72 2 месяца назад

    Concepts are too advanced for me but great video.

    •  2 месяца назад

      What did you not understand? Maybe we can help!

  • @khangle6872
    @khangle6872 2 месяца назад

    Something just doesnt sit right with me when business-related method is mixed with Eloquent "config" method on a Model. Especially when you have the Order model, you __can__ still call save() and all that. The way I see it, there are 3 methods in the save order "flow": start(), addTicket(), place(). Yet they are defined amidst a dozens of Eloquent specific methods: relationship, accessor and mutators, casts,... On top of the inherited Model methods: saves(), delete(), update(),... If someone would onboard 5 years from now, how would he know that these 3 methods are special and belong in a "flow", and that he should not call save() directly? How would he know to organize additional such methods? If we are talking about Aggregates, we are obviously implementing DDD, or at least DDD-like patterns, which separate business logic from infrastructure implementation. I think it best we dont put Domain Models (which handle business logic) and ActiveRecord models (which is atrongly coupled to db) inside each other

    •  2 месяца назад

      You’re not wrong; I believe my thinking differs in the sense that I am assuming Eloquent was *already chosen* and it represents a domain model (as it does in most apps) - so it’s more of: we have already chosen Eloquent - given the tradeoffs, what can we do to make our lives easier on the long run within those constraints? You’re right , there’s really nothing stopping you from just calling save(), etc, so it’s mostly a matter of documentation and everyone being on the same page.

  • @tmanley1985
    @tmanley1985 2 месяца назад

    One thing this also does is put off any database transactions until the end. I've found that if you wrap everything into one database transaction at first, you end up stuffing a bunch of stuff in there without thinking about it, and those things (e.g., network calls, memory allocations for instances, etc.) all incur a cost. This can lead to long running transactions in your database which can lead to all manner of issues. This is an elegant pattern. Thanks!

  • @afsdab
    @afsdab 2 месяца назад

    I confess I'm just watching your videos because your voice 🤣 Another great vídeo !

    •  2 месяца назад

      Haha I’ll take that as a compliment :-)

    • @afsdab
      @afsdab 2 месяца назад

      @ hahah Besides that, I liked the content you have here, it's awesome, concepts and examples are rare to find nowadays

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

    Great job, Mateus! Any plans on doing something related to Rails anytime soon? Big fan over here, keep it up!

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

    Hi Mateus. Could you help me understand the difference between failed jobs in Horizon and the `failed_jobs` table? Horizon seems to have its own concept of failed jobs that it stores in Redis. Is retrying a job using `queue:retry` the same as clicking "Retry" on a job in the Horizon UI? Are the 2 supposed to be kept in sync and work together? And is `queue:retry all` the right way to retry all failed jobs when I'm using Horizon?

    • @binaryfire
      @binaryfire 2 месяца назад

      Anyone else have any thoughts on this? There are a few GitHub issues and articles about it too so I’m thinking it’s a just flaw with Horizon

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

    i have problem in production on ce2

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

    Also - do you use a factory pattern like managers (or drivers) and could you show a bit more about that as well as a Null object pattern?

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

      Yeah I’ll add it to the backlog 👍

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

    Nice! I really dig this way of working. Question: Are you always using "Providers" to integrate with 3rd party solutions or do you also use "Services"? Sometimes I think it's hard to see the difference 😅 Also, would love to see a video of how to test each of the implementations. Would you in those cases use mock with http fake to fake the expected output of the api?

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

      Both! I try not to dig too much into nomenclature, so here’s a concrete example: you need to accept payments using different providers. I like to approach this by having a “PaymentService”, or “PaymentGateway” interface. Similar to the videos. Then I might have a “StripeGateway”, “NmiGateway”, etc. If the logic is simple, then maybe everything is encapsulated inside that class. More often than not, it isn’t that simple, so I end up also creating objects solely responsible for talking to these providers, and they’re not aware of the “PaymentGateway”, which is an app-level concern. Payment Gateways take inputs that are relevant to their context, map them to something the actual integration will understand, and then parse that response. For example… you might have a SaleRequest for NMI using Saloon that takes a certain object shape and returns a PSR-7 Response. I’d like to have that integration work by itself, and not be coupled to anything. Then, on my Gateway, or Service, whatever you want to call it, you can take a common object between all implementations (since it follows the contract), map it to something that “SaleRequest” understands, and then map its response back to something that your app understands. In short: Your domain is aware of PaymentGateway Specific payment gateways are aware of its integrations (e.g NmiGateway is aware of Nmi\SaleRequest) Nmi\SaleRequest isn’t aware your app even exists Your domain is not aware of Nmi or any other specific implementation I’m on my phone and I’m not sure it made a lot of sense in writing. I can try making a diagram or some code examples later. 👍

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

    Fakes are indispensable in my opinion and I've started moving away from mocks whenever I have situations like this. Also, just watching your video made me think that a fake of an implementation is a sister of the Null Object Pattern. While used differently, they're of the same species at least. In addition to this, this is a great way to Mr. Miyagi someone into understanding the strategy pattern!

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

      thank you!

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

    Keep them coming! Super informative!

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

      Thanks! Will do!

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

    I tried to listen but the cat made too much noise.

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

      he’s noisy!