No video

The Unit of Work Design Pattern Explained

  Рет қаралды 22,901

ArjanCodes

ArjanCodes

Күн бұрын

In today's video, I'll explain the Unit of Work design pattern, a crucial concept for anyone who regularly interacts with databases. This pattern plays a key role by accumulating all transactions and executing them collectively. But why is this necessary? Find out this video.
🔥 GitHub Repository: git.arjan.code...
👷 Join the FREE Code Diagnosis Workshop to help you review code more effectively using my 3-Factor Diagnosis Framework: www.arjancodes....
💻 ArjanCodes Blog: www.arjancodes...
✍🏻 Take a quiz on this topic: www.learntail....
🎓 Courses:
The Software Designer Mindset: www.arjancodes...
The Software Architect Mindset: www.arjancodes...
Next Level Python: Become a Python Expert: www.arjancodes...
The 30-Day Design Challenge: www.arjancodes...
👍 If you enjoyed this content, give this video a like. If you want to watch more of my upcoming videos, consider subscribing to my channel!
Social channels:
💬 Discord: discord.arjan....
🐦 X: x.com/arjancodes
🌍 LinkedIn: / arjancodes
🕵 Facebook: / arjancodes
📱 Instagram: / arjancodes
♪ Tiktok: / arjancodes
👀 Code reviewers:
- Yoriz
- Ryan Laursen
- Dale Hagglund
- Kit Hygh
- Alexander Milden
- Bean
🎥 Video edited by Mark Bacskai: / bacskaimark
🛒 GEAR & RECOMMENDED BOOKS: kit.co/arjancodes
🔖 Chapters:
0:00 Intro
0:41 What is the Unit of Work Pattern?
3:53 The Session Object as a Unit of Work
9:44 Benefits of Using the Unit of Work Pattern
11:43 Outro
#arjancodes #softwaredesign #python
DISCLAIMER - The links in this description might be affiliate links. If you purchase a product or service through one of those links, I may receive a small commission. There is no additional charge to you. Thanks for supporting my channel so I can continue to provide you with free content each week!

Пікірлер: 28
@ArjanCodes
@ArjanCodes 3 ай бұрын
👷 Join the FREE Code Diagnosis Workshop to help you review code more effectively using my 3-Factor Diagnosis Framework: www.arjancodes.com/diagnosis.
@NewQuietBear
@NewQuietBear 19 күн бұрын
Interessant, ik heb ORM's gebruikt bijvoorbeeld en alhoewel ik nog niet bekend was met de onderliggende patronen, herken ik een hoop terug doordat ik deze packages ooit heb gebruikt.
@iamkaransethi
@iamkaransethi 3 ай бұрын
I liked your calm and composed style of explaining a complex topic.Well done, your 3rd example made the most sense to me in terms of rollbacks scenario - IaC setup seems like a good place to use this design pattern. Thanks, Arjan!
@ArjanCodes
@ArjanCodes 3 ай бұрын
Glad it was helpful!
@inhahe
@inhahe 3 ай бұрын
You asked about other ideas for use of the unit of work..one thing that came to mind was installing programs. All program installations seem to be able to roll back everything if the installation fails for some reason.
@avazart614
@avazart614 3 ай бұрын
Session has method/contextmanager "begin" for control transaction. SQLAlchemy has special mixin for using as dataclass "MappedAsDataclass" (for __str__/__repr__)
@Lexaire
@Lexaire 3 ай бұрын
SQLAlchemy is so powerful it's almost too powerful. Learning to use everything SQLAlchemy has is like a full time job in itself.
@spanomatic
@spanomatic 3 ай бұрын
Unit of work is used in Guaranteed messaging between systems and applications (messaging middleware). send message and ack that sort of thing. Redis also has batch functions to perform several ops at once.
@kaosce
@kaosce 3 ай бұрын
But in the case of unit of work between systems, you would need a separate system dedicated to centralizing these operations. Would it still be a good idea?
@spanomatic
@spanomatic 3 ай бұрын
@@kaosce In a best case I would think so too. But I have see it both ways with the middle ware running on the same server as the app, but it is a separate app for sure.
@klmcwhirter
@klmcwhirter 3 ай бұрын
Please take a look at the echo=True option to the create_engine function. This will ask sqlalchemy to output db interaction info including the sql statements being executed and more ... Another great video. The UnitOfWork and Repository patterns are critical to building resilient, reliable persistence layers - and not just with db, but also filesystem, web service APIs, etc. !
@uruzrune7216
@uruzrune7216 3 ай бұрын
Would you consider doing a Saga Pattern video? Also, can you demonstrate using Saga and Unit of Work together to roll back a failed Saga?
@aashayamballi
@aashayamballi 3 ай бұрын
can you please cover django concepts as well?
@hcubill
@hcubill 3 ай бұрын
Excellent video! I had never heard of this, gives me good ideas how to change our code!
@ArjanCodes
@ArjanCodes 3 ай бұрын
Glad it was helpful!
@edgeeffect
@edgeeffect 3 ай бұрын
My favourite ORM for PHP (sorry) uses UOW... so much nicer than those other Active Record ORMs. I did an extension that logged database changes to.... the database by scanning and extending the UOW on a commit... I had Python friends (I was doing JS) at my old job who used SQL Alchemy and I was always curious as to what was inside... now I really want to try it. UOW is my favorite underrated pattern - "boo!" to Active Record.
@obsidiansiriusblackheart
@obsidiansiriusblackheart 3 ай бұрын
I used to work for a PoS company and I accidentally implemented Unit of Work pattern without knowing it existed :) mine was a bit janky though, a dict of bools that was tracked between methods to know from which step we had to rollback
@jamesclarke7259
@jamesclarke7259 3 ай бұрын
As always thanks, could you maybe do one on django?
@hubstrangers3450
@hubstrangers3450 3 ай бұрын
Thank you....would be ideal scenario for embedded DBs (DuckDB, targeting scientific workloads, with specific pythonic libraries)
@BuFu1O1
@BuFu1O1 3 ай бұрын
Do a coderoast of the nanogpt repo of Andrej Karpathy
@StarLord1996
@StarLord1996 3 ай бұрын
Do I need a different implementation of this pattern for each use-case in my domain?
@lucianop.3922
@lucianop.3922 3 ай бұрын
This looks extremely similar to using an event queue. Throughout the lifetime of your program, you add events to a queue, and you delay their execution to a point where it is convenient (for any reason depending on context, in a game you might want to apply some filtering to change the order of events and process some before others), so it gives you full control on the order of execution. But, it can also help you to see which events failed, and then do the appropriate rollback. EDIT: On second thought, it is an event queue, but used in a different context with (potentially) different intentions.
@kennyostrom3098
@kennyostrom3098 3 ай бұрын
"Command" comes closest in the classic gang of four design patterns, and it mentions having a rollback queue.
@TheEvertw
@TheEvertw 3 ай бұрын
Any design pattern is a combination of 4 (sometimes more) classes doing something together. The description of the context makes a design pattern useful. Personally, I consider the UoW pattern a merge of the Command and the Decorator patterns. Any queuing feature is not part of the actual pattern, though real implementation will usually have queuing as well. Like most real implementations of the Command Pattern also have queuing, but it is not part of the pattern itself.
@nimmneun
@nimmneun 3 ай бұрын
Yup, we use Workers in combo with UOWProviders that are responsible for orchestration /execution/rescheduling and gathering any required data to create a UOW.
@aflous
@aflous 3 ай бұрын
1st?
@greob
@greob 3 ай бұрын
Nice video, very useful!
@ArjanCodes
@ArjanCodes 3 ай бұрын
Thank you, glad you enjoyed it!
Domain-Driven Design Made Me Realize Something About AI Tools
14:39
Protocols vs ABCs in Python - When to Use Which One?
15:31
ArjanCodes
Рет қаралды 35 М.
No empty
00:35
Mamasoboliha
Рет қаралды 12 МЛН
路飞太过分了,自己游泳。#海贼王#路飞
00:28
路飞与唐舞桐
Рет қаралды 42 МЛН
OMG what happened??😳 filaretiki family✨ #social
01:00
Filaretiki
Рет қаралды 8 МЛН
Unit of Work in ASP.NET Core
14:57
Raw Coding
Рет қаралды 18 М.
20 System Design Concepts Explained in 10 Minutes
11:41
NeetCode
Рет қаралды 958 М.
Every Developer Should Know This
15:38
ArjanCodes
Рет қаралды 25 М.
5 Design Patterns That Are ACTUALLY Used By Developers
9:27
Alex Hyett
Рет қаралды 245 М.
Python 3.12 Generic Types Explained
18:27
ArjanCodes
Рет қаралды 60 М.
How Much FASTER Is Python 3.13 Without the GIL?
10:00
ArjanCodes
Рет қаралды 131 М.
Reacting to Controversial Opinions of Software Engineers
9:18
Fireship
Рет қаралды 2 МЛН
The State Design Pattern in Python Explained
19:14
ArjanCodes
Рет қаралды 74 М.
I've been using Redis wrong this whole time...
20:53
Dreams of Code
Рет қаралды 351 М.
No empty
00:35
Mamasoboliha
Рет қаралды 12 МЛН