Допустим, есть проект -- обертка над API соц. сети. В нем есть класс Wall (для работы со стеной пользователя) и класс Post (содержит данные поста, их геттеры/сеттеры и другие методы).
Класс Wall:
class Wall
{
public function addPost($text)
{
... // какие-то действия
return new Post($id, $text);
}
public function getLastPost()
{
... // какие-то действия в результате которых мы можем:
return new Post($last['id'], $last['text']);
}
// предположим, метод, который делает репост или другие действия, не суть
public function repost(Post $post)
{
... $post->getId() ...
... $post->toString() ...
.... // ещё какие-то действия с объектом
}
Класс Post:
class Post
{
... // переменные/поля
... // геттеры/сеттеры
... // toString и другие связанные методы
}
При этом видно, что класс Wall очень тесно связан с классом Post (особенно там, где создаются новые экземпляры в классе Wall) и это не соответствует SOLID и в частности принципу инверсии зависимостей.
Как ослабить связь между классами и сделать их более переносимыми и SOLIDными? И нужно ли это делать в такой ситуации? У меня в принципе есть идеи, но, уверен, есть какой-то изящный паттерн, который решит все мои проблемы и о котором я пока не знаю.