Advanced Design Patterns

Python PatternsFree Lesson

Advertisement

Advanced Design Patterns

Repository, unit of work, and enterprise patterns.

Overview

Master enterprise design patterns.

Repository Pattern

from abc import ABC, abstractmethod

class UserRepository(ABC):
    @abstractmethod
    def find_by_id(self, user_id):
        pass
    
    @abstractmethod
    def find_by_email(self, email):
        pass
    
    @abstractmethod
    def save(self, user):
        pass

class SQLUserRepository(UserRepository):
    def __init__(self, session):
        self.session = session
    
    def find_by_id(self, user_id):
        return self.session.query(User).get(user_id)
    
    def find_by_email(self, email):
        return self.session.query(User).filter_by(email=email).first()
    
    def save(self, user):
        self.session.add(user)
        self.session.commit()

Unit of Work

class UnitOfWork:
    def __init__(self, session):
        self.session = session
        self.new_objects = []
        self.dirty_objects = []
        self.deleted_objects = []
    
    def register_new(self, obj):
        self.new_objects.append(obj)
    
    def register_dirty(self, obj):
        self.dirty_objects.append(obj)
    
    def register_deleted(self, obj):
        self.deleted_objects.append(obj)
    
    def commit(self):
        for obj in self.new_objects:
            self.session.add(obj)
        for obj in self.dirty_objects:
            self.session.merge(obj)
        for obj in self.deleted_objects:
            self.session.delete(obj)
        self.session.commit()

Practice

Implement a service layer using repository pattern.

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement