Разорвать зависимость от одного класса в другом классе - PullRequest
0 голосов
/ 06 мая 2019

У меня есть список объектов, десериализованных из разных файлов JSON в классы Java. Большинство из них несут только одну ответственность - они хранят данные, десериализованные из файлов JSON, и предоставляют всем, кому это необходимо, доступ к этим данным.
Некоторые из них также имеют некоторую логику, реализованную внутри, например, у меня есть список классов, который реализует интерфейс «Action»:

public interface Action {
    boolean canAct(Player player);
    void act(Player player);
}

public class ActionRestoreHealth implements Action {

    @SerializedName("health")
    private int health;

    public int getHealth() {
        return health;
    }

    @Override
    public boolean canAct(Player player) {
        return player.health < player.maxHealth;
    }

    @Override
    public void act(Player player) {
        if(player.health + health < maxHealth)
            player.health += this.health;
        else
            player.health = player.maxHealth;
        player.notifyHealthChanged();
    }

}

Теперь я хочу извлечь все эти классы данных в отдельный модуль maven, чтобы дать другим проектам, связанным с основным простым способом использования всей логики загрузки / десериализации данных.
Но зависимости от таких классов, как «Player» в этих классах держателей данных, не позволяют мне сделать это. Теперь, если я извлеку эту логику данных в отдельный модуль maven - мне нужно будет предоставить информацию о классе Player всем клиентам, вызывающим эту логику.
Я думаю, что когда я реализовал интерфейсы типа «Action» непосредственно в классах держателей данных, я нарушил единую ответственность, а также добавил сильную связь между данными Держатель класса и Player, и это тоже плохая практика.
Было очень удобно выполнять каждое действие непосредственно из класса держателя данных: мне не нужно ничего знать о конкретном классе действий, простом вызове методов "canAct" и "act", но кажется, что способ, которым я реализовал это, не лучший выбор ,

Мои вопросы:
1) Существуют ли передовые практики / шаблоны проектирования, чтобы разорвать эту связь?
2) Могу ли я где-нибудь извлечь интерфейс Action, чтобы удалить зависимость держателей данных от класса Player, и при этом иметь удобный способ вызова методов canAct и act?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...