Допустим, есть проект -- обертка над 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ными? И нужно ли это делать в такой ситуации? У меня в принципе есть идеи, но, уверен, есть какой-то изящный паттерн, который решит все мои проблемы и о котором я пока не знаю.