Допустимо ли обращаться к базе данных прямо из драйверов?

#php #codeigniter

#php #codeigniter

Вопрос:

Я пишу библиотеку аутентификации для Code Igniter с использованием драйверов (в основном для практики).
Я пишу библиотеку так, чтобы она была расширяемой, поэтому я использую платформу драйверов.

В библиотеке есть несколько драйверов,
simple (базовое имя пользователя / пароль),
facebook ,
twitter ,
google

У каждого драйвера есть свой собственный набор таблиц базы данных для разных методов аутентификации.

Вы можете вызвать $this->user->is('logged in') , который запрашивает все допустимые драйверы, если пользователь вошел в систему.

или вы можете просто позвонить $this->user->facebook->is('logged in') , чтобы узнать, вошел ли пользователь в систему через facebook и т. Д.

Теперь для метода simple входа в систему вы захотите получить имя пользователя / пароль пользователя из базы данных.

для метода facebook входа в систему вам нужно будет проверить, есть ли в базе данных токен facebook и т. Д. эти вызовы можно вызывать из драйверов или я должен создать модель для каждого драйвера?

Комментарии:

1. Почему не одна модель для всех библиотек? например, что-то вроде «auth_model»; но на самом деле зависит от того, насколько сложны эти модели.

2. Поскольку идея драйверов заключается в том, что их можно «вставить» без изменения ядра системы, например, скажем, кто-то хотел создать basecamp метод входа в систему, ему пришлось бы модифицировать auth_model модель, с помощью этого метода вы можете просто вставить файлы, и это не повлияет на другие методы!

3. Что ж, это правда. Я действительно всегда использовал библиотеки вместо драйверов, поэтому я никогда не ставил перед собой эту проблему. Тогда, я думаю, вы можете сделать все в файле драйвера… В любом случае, нет ничего «незаконного» в том, чтобы не следовать «MVC» буквально, и если основной причиной здесь является инкапсуляция, я думаю, вам следует придерживаться вызовов db в драйверах, имхо

4. @DamienPirsy Пожалуйста, оставьте свой окончательный комментарий в качестве ответа, и я приму его, в противном случае я скоро удалю этот вопрос.