Junior — Middle
Explain the concept of UnitOfWork and its role in transaction management in an application.
sobes.tech AI
Answer from AI
UnitOfWork is a pattern that manages changes in a set of objects as a single transaction. Its main task is to track all operations (creation, update, deletion) on objects within a business logic and either commit all changes to the database or roll them back in case of an error.
In Python, UnitOfWork is often used together with ORM (e.g., SQLAlchemy). It helps to:
- Collect all changes in one place.
- Minimize database access.
- Ensure atomicity of operations.
An example of a simplified implementation:
class UnitOfWork:
def __init__(self):
self.new_objects = []
self.dirty_objects = []
self.removed_objects = []
def register_new(self, obj):
self.new_objects.append(obj)
def register_dirty(self, obj):
self.dirty_objects.append(obj)
def register_removed(self, obj):
self.removed_objects.append(obj)
def commit(self):
try:
for obj in self.new_objects:
obj.insert_to_db()
for obj in self.dirty_objects:
obj.update_in_db()
for obj in self.removed_objects:
obj.delete_from_db()
# here you can add transaction commit
except Exception:
# rollback transaction
raise
def rollback(self):
# rollback logic
pass
Thus, UnitOfWork ensures data integrity and ease of transaction management in an application.