I am creating a schema for Doctrine but first I'm creating interfaces, abstract classes (models) which will be extended by the entities.
I have a PresentationInterface which contain getter and setters for presentation info, ParticipantInterface which contains the same (firstname, lastname, email).
Both have their abstract classes, Presentation and Participant which implement the getter and setters and also contain mapping information for those fields. They may contain some utlity methods which are not defined in the interface but are needed inside the getter and setters for processing data.
The entities are Presentation, Attendee and Presenter. Attendee extends from the Participant model, and Presenter from Attendee. Now to differentiate I'm using Doctrine's single table inheritance type with a discriminator column called is_presenter which is mapped at Attendee entity.
Basically, a Presenter is able to create a Presentation which thereafter is joined by Attendees.
My question is, should isPresenter have been defined in ParticipantInterface? Is the way I've done it worse or fine? If I had left it in the interface, I couldn't use it as a discriminator anyway, but from a logical point of view should it have been in the interface or maybe in another called PresenterParticipantInterface?
Presentation
class which haspresenter
andattendees
fields of typePersonID
and list thereof. But this is merely one symptom of the fundamental issue I wanted to point out; namely that you appear to be thinking about types of objects before thinking about what you want them to do. Issues like this always crop up when you do that.