глубоко ушел в абстракции.
1. Кто и для чего будет использовать методы getTags(), getCountry() ?
по логике допустим, у тебя интерфейс ArticleContract добавляет функции getTags()
лучше тогда создать интерфейс TagsContract
так как потом требования могут изменится, и тэги нужны будут для News
2. Зачем на каждый чих делать интерфейсы? Для Service я вообще не вижу смысла. Или ты собираешься подменять где-то ArticleService другим ArticelService который должен так же возвращать ArticleCollectionContract?
3. самый простой вариант для начала
оставляем interface PostContract
по-необходимости для функционала делаем interface TagContract
оставляем PostRepostory, PostService
PostRepostory расширяем чтобы он мог возвращать объекты по типу (например
$postRepostory->getNews(), $postRepostory->getArticles() )
В тех местах где тебе реально нужен доп функционал типа getCountry - создаешь отдельный интерфейс interface CountryContact
и далее в тех местах где будет зависимость встраиваешь CountryContact
в итоге class News extends Post implements CountryContact, TagContract