Advertisement
LilChicha174

Untitled

Oct 29th, 2024
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.16 KB | None | 0 0
  1. # Плохой пример
  2.  
  3. class OrderRepository:
  4.    def save(self, order_data):
  5.        # Метод сохраняет заказ
  6.        pass
  7.  
  8.  
  9.    def rollback(self):
  10.        # Метод откатывает транзакцию
  11.        pass
  12.  
  13.  
  14. class SQLOrderRepository(OrderRepository):
  15.    def save(self, order_data):
  16.        print("Saving order in SQL database")
  17.        # Логика для сохранения в SQL базе данных
  18.  
  19.  
  20.    def rollback(self):
  21.        print("Rolling back SQL transaction")
  22.        # Логика для отката транзакции в SQL
  23.  
  24.  
  25. class NoSQLOrderRepository(OrderRepository):
  26.    def save(self, order_data):
  27.        print("Saving order in NoSQL database")
  28.        # Логика для сохранения в NoSQL базе данных
  29.  
  30.  
  31.    def rollback(self):  # Нарушение LSP, т.к. NoSQL базы могут не поддерживать транзакции
  32.        raise NotImplementedError("Rollback is not supported in NoSQL databases")
  33.  
  34.  
  35. # Хороший пример
  36.  
  37. from abc import ABC, abstractmethod
  38.  
  39.  
  40. # Базовый класс для всех репозиториев
  41. class OrderRepository(ABC):
  42.    @abstractmethod
  43.    def save(self, order_data):
  44.        pass
  45.  
  46.  
  47. # Интерфейс для транзакционных репозиториев
  48. class TransactionalRepository(OrderRepository):
  49.    @abstractmethod
  50.    def rollback(self):
  51.        pass
  52.  
  53.  
  54. # SQL-репозиторий, поддерживающий транзакции
  55. class SQLOrderRepository(TransactionalRepository):
  56.    def save(self, order_data):
  57.        print("Saving order in SQL database")
  58.        # Логика для сохранения в SQL базе данных
  59.  
  60.  
  61.    def rollback(self):
  62.        print("Rolling back SQL transaction")
  63.        # Логика для отката транзакции в SQL
  64.  
  65.  
  66. # NoSQL-репозиторий без поддержки транзакций
  67. class NoSQLOrderRepository(OrderRepository):
  68.    def save(self, order_data):
  69.        print("Saving order in NoSQL database")
  70.        # Логика для сохранения в NoSQL базе данных
  71.  
  72.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement