1

Тема: Допоможіть з абстракцією

Ну, Я отримав тестове завдання від одної компаній і виконав його. Сьогодні мені дали позитивну відповідь на мою роботу і попросили модернізувати свій "фреймворк"... в одному пункті вказувалося на те що потрібно винести в окремий клас всі операції з БД і зробити його абстрактним. Як реалізувати таку структуру коду з використанням MVC? Абстрактний клас повинний бути батьківським класом щоб була можливість виклику його функцій, тобто успадкувати його повинна "модель"(в мене вже є цей клас-батько для всіх інших моделей) щоб всі функції були доступні в інших моделях, але в мене це не виходить... модель_користувача->батьківська_модель->клас_для_БД
Я чомусь не можу викликати стандартні методи PDO, можливо вони втрачаються при виклику батьківської моделі?
Гадаю, не сильно Вас заплутав...

2

Re: Допоможіть з абстракцією

generation написав:

Абстрактний клас повинний бути батьківським класом щоб була можливість виклику його функцій, тобто успадкувати його повинна "модель"(в мене вже є цей клас-батько для всіх інших моделей) щоб всі функції були доступні в інших моделях

Ні. В загальному випадку обробник БД і модель — це різні речі, їх ні в якому разі не можна зв’язувати за допомогою наслідування. Ваша модель має включати обробник БД в себе.

3 Востаннє редагувалося generation (07.05.2015 18:37:26)

Re: Допоможіть з абстракцією

quez написав:
generation написав:

Абстрактний клас повинний бути батьківським класом щоб була можливість виклику його функцій, тобто успадкувати його повинна "модель"(в мене вже є цей клас-батько для всіх інших моделей) щоб всі функції були доступні в інших моделях

Ні. В загальному випадку обробник БД і модель — це різні речі, їх ні в якому разі не можна зв’язувати за допомогою наслідування. Ваша модель має включати обробник БД в себе.

так, Я також так гадав, але мені потрібно написати окремий клас який працюватиме з БД... сам не розумію навіщо все ускладнювати. Можливо вони не так сформулювали чи Я не так зрозумів...

4

Re: Допоможіть з абстракцією

generation написав:
quez написав:
generation написав:

Абстрактний клас повинний бути батьківським класом щоб була можливість виклику його функцій, тобто успадкувати його повинна "модель"(в мене вже є цей клас-батько для всіх інших моделей) щоб всі функції були доступні в інших моделях

Ні. В загальному випадку обробник БД і модель — це різні речі, їх ні в якому разі не можна зв’язувати за допомогою наслідування. Ваша модель має включати обробник БД в себе.

так, Я також так гадав, але мені потрібно написати окремий клас який працюватиме з БД... сам не розумію навіщо все ускладнювати. Можливо вони не так сформулювали...

Все правильно вони сформулювали. Винесіть обробку БД в окремий клас, а в класі моделі створіть об’єкт цього класу.

5

Re: Допоможіть з абстракцією

quez написав:

Все правильно вони сформулювали. Винесіть обробку БД в окремий клас, а в класі моделі створіть об’єкт цього класу.

ну екземпляр абстрактного класу Я створите не зможу, а з моделі не виходить викликати методи властиві об'єкту PDO

6

Re: Допоможіть з абстракцією

generation написав:
quez написав:

Все правильно вони сформулювали. Винесіть обробку БД в окремий клас, а в класі моделі створіть об’єкт цього класу.

ну екземпляр абстрактного класу Я створите не зможу, а з моделі не виходить викликати методи властиві об'єкту PDO

Він на то і абстрактний, щоб його екземпляр не можна було створити. Від абстрактного класу наслідуються класи реалізації, екземпляри яких можна створювати. От ви використовуєте PDO. Я вичитав, що він з’єднується з різними базами по-різному. Тому універсального методу для з’єднання ви написати не можете і перевизначаєте його в класах-нащадках, які призначені для роботи з різними базами. А зробити запит ви можете однаковим чином до всіх баз, тому ці методи пишете в абстрактному класі і не перевизначаєте.

Подякували: leofun011

7

Re: Допоможіть з абстракцією

створюэте конструктор,в якому створюэте пiдключення до PDO. Далi пишете публiчнi методи для роботи з бд, де звертаэтесь до pdo через this.
Ну i наслiдуэте клас,а потiм його публiчнi методи.

8

Re: Допоможіть з абстракцією

створюэте конструктор,в якому створюэте пiдключення до PDO. Далi пишете публiчнi методи для роботи з бд, де звертаэтесь до pdo через this.
Ну i наслiдуэте клас,а потiм його публiчнi методи.

9

Re: Допоможіть з абстракцією

Вони хочуть, щоб ти для зв'язку з БД реалізував шаблон проектування Проксі http://uk.wikipedia.org/wiki/%D0%97%D0% … %BD%D1%8F)

Для чого це потрібно в реальному життя?
1. Для того щоб у будь-який момент без надмірних витрат часу перемкнути  проект на роботу з іншим типом бази даних.
2. Такий підхід дозволяє прикручувати додаткові функції не зачіпаючи код проекту, наприклад на рівні цього класу ти зможеш дописати код в методі виконання запиту, який буде логувати запити, які довго виконуються.

10

Re: Допоможіть з абстракцією

Дякую всім за допомогу. Завдання Я виконав ще вчора)) там трішки на тупив