Пишу на Python. Столкнулся с такой задачей — существует класс для работы с базой данных. У него есть некие функции. Одна получает первые 50 записей, вторая сохраняет запись и возвращает какой-то параметр, третья получает запись и т.п. Для работы я создаю 1 экземпляр этого класса и устанавливаю ссылку на него во всех объектах, а они по ссылке обращаются к этому классу и так получают доступ к его функциям.
class DB():
def __init__(self):
#Какие-то настройки для создания соединения с БД
def createConnection(self):
#Создание соединения
self.connection = new Connection(param1, param2, param3)
def get50Records(self):
#Получение 50 записей
result = self.conncetion.select(TABLE_RECORDS, limit=50)
return result
def saveRecords(self, params):
pass
....
В чем проблема — когда я хочу добавить новую функцию в класс DB, мне приходиться дописывать ее в сам класс. То есть как бы изменять его. А это не хочется делать. Нужен какой-то удобный способ добавлять новый функционал.
Я придумал вот такое. Я создаю один класс DB, в котором есть только параметры для создания соединения и сама функцию создания соединения. Далее я создаю новый класс называю его, например, DBget50Records и там функционал функции get50Records. А класс DB я наследую от класса DBget50Records. То есть, получается, что DBget50Records — родитель и у класса DB есть весь функционал, что и у родителя. Поэтому я, так же, создаю 1 экземпляр класса DB и все объектам передаю ссылку на него. А если мне надо расширить функционал, то я создаю новый класс DBsaveRecords и добавляю его в родители класса DB.
class DBget50Records():
def get50Records(self):
#Получение 50 записей
result = self.conncetion.select(TABLE_RECORDS, limit=50)
return result
class DBsaveRecords():
def saveRecords(self, params):
pass
class DB(DBget50Records, DBsaveRecords):
def __init__(self):
#Какие-то настройки для создания соединения с БД
def createConnection(self):
#Создание соединения
self.connection = new Connection(param1, param2, param3)
Что вы думаете по этому поводу? Я понимаю, что все ровно придется менять класс DB добавляя ему родителей, но пока что ничего интереснее не придумал. Паттерн Декоратор не подходит!