Разрывает ли создание объекта из другого внедренного объекта внедрение зависимости? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть класс, который использует pyodbc соединение с базой данных, класс также использует cursor этого соединения для выполнения sql операторов, поэтому в настоящее время я внедряю соединение с базой данных следующим образом:

class MyClass:
    def __init__(self, db):
        self.db = db
        self.cursor = db.cursor()

Хотя я спрашиваю, не придерживаюсь ли я правильного внедрения зависимостей с помощью self.cursor = db.cursor(). Должен ли я вместо этого ввести курсор тоже? Вот так:

class MyClass:
    def __init__(self, db, cursor):
        self.db = db
        self.cursor = cursor

Еще одна мысль, которая у меня возникла, заключалась в том, чтобы не иметь self.cursor переменной экземпляра, и просто вызывать self.db.cursor() в любое время, когда мне нужно использовать курсор.

Что лучший подход для того, чтобы иметь класс, который правильно внедряет свои зависимости? Зависит ли класс от соединения с базой данных и от курсора, или просто от соединения с базой данных?

1 Ответ

0 голосов
/ 24 апреля 2020

Я не могу сказать, что знаю лучший подход, но верным способом было бы просто сохранить курсор как свойство вашего класса;

class MyClass:
    def __init__(self, db):
        self.db = db

    @property
    def cursor(self):
        return self.db.cursor()

Это позволит вам использовать classobj. курсор, как вы хотели бы изначально, сохраняя его привязанным к объекту db.

...