Когда стоит делать класс абстрактным?

166
16 августа 2017, 19:36

Проект saas-сервис типа мегаплана. В голове есть приблизительная структура классов, например: работа с БД, работа с задачами, сервисный класс отвечающий за персональные настройки, валидатор данных, api.

Вопрос: по каким признакам можно определить что этот класс нужно сделать абстрактным а конкретные реализации делать уже в наследниках?

Например если есть несколько типов пользователей (бесплатный, тариф 1, тариф 2) стоит ли делать класс пользователей абстрактным и в нём уже задавать общие свойства пользователей а дальше уже делать их права разными?

Или что стоит вынести в абстракцию для класса работы с БД например?

Answer 1

Вопрос: по каким признакам можно определить что этот класс нужно сделать абстрактным а конкретные реализации делать уже в наследниках?

В самом вопросе уже имеется ответ. Когда имеется необходимость в полиморфизме (один интерфейс — множество реализаций), тогда стоит подумать о создании абстрактного класса (в роли интерфейса, зависит от ЯП), где будут указаны основные методы для работы с данными. И в зависимости от типа данных, уже создаются дочерние классы с конкретными реализациями под них.

Answer 2

Абстрактный класс стоит создавать только тогда когда ты понимаешь что объект данного класса создавать не имеет смысла, но все поля и методы которые находятся внутри нашего абстрактного класса должны быть у всех дочерних классов, то есть дочерний класс не может быть создан не имея нужных полей...

На счет тарифов, да можно. Так будет удобнее читать код и ориентироваться. А вот БД, я думаю только в том случае если у вас есть много других баз данных, и было бы удобно создать один абстрактный класс для инициализации методов типа close(), connect() и т.д. а внутри у дочерних классов имплементировать их под нужный вам БД. Но в этом случае, можно даже обойтись интерфейсом нежели чем абстрактным классом.

READ ALSO
Как массово изменить участки кода в файле?

Как массово изменить участки кода в файле?

Имеется файл xml, в котором присутствуют примерно такие участки кода:

194
как запустить сокет-сервер на хостинге

как запустить сокет-сервер на хостинге

я создал сайт "pg-tsttk" на хостинге 000webhost

170
Vk Streaming API добавления правил PHP

Vk Streaming API добавления правил PHP

Здравствуйте, относительно недвано Вконтакте открыла Streaming API, но информации по ней не много 2 статьи на хабре, и документация с примерами...

169
Отправить POST запрос PHP

Отправить POST запрос PHP

Здравствуйте, нужно на данный URL https://streamingvk

161