У меня в принцип инверсии зависимостей и инверсию управления совсем недавно, и от того, что я в настоящее время знаю (поправьте меня, если я ошибаюсь), что DIP утверждает, что модульDependency Injection Проблема
высокого уровня/класс не должен зависеть от модуля низкого уровня/класса
как высокого и модуль низкого уровня не должен зависеть от деталей (не уверен, что означает, что это один ???), но абстракции (интерфейсы)
но когда я писал простую программу реализовать этот принцип, я столкнулся с проблемой (объясню позже)
Моя программа состоит из инвентаря и класса игрока, который реализует «ICharacterable»
class Player : ICharacterable {
private int _health = 100;
public int Health{
get{
return _health;
}
}
public int HealthIncrease(int health){
//increase health
return _health + health;
}
}
class Inventory{
ICharacterable player = null;
//constructor injection
public Inventory(ICharacterable player) {
this.player = player;
}
//increase player health
public void UseHealthPotion(int health) {
player.HealthIncrease(health);
}
}
class Program{
static void Main(string[] args) {
Player john = new Player();
Inventory inv = new Inventory(john);
inv.UseHealthPotion(30);
Console.WriteLine(john.Health);
}
}
//interface
public interface ICharacterable {
int HealthIncrease(int health);
}
проблема, консоль возвращает 100 вместо из 130. Я полагаю, что проблема возникла из-за того, что я объявил, что вместо инъекции вводит тип ICharacterable, но это может нарушить DIP, есть ли способ сделать это? Благодаря
Сторона не о модели, «Инвентарь HAS-Player» звучит странно. И кто пьет зелья, игроки или инвентарь? –
Почему «HealthIncrease» возвращает что-нибудь?Я либо изменил бы состояние (то есть увеличил поле здоровья игрока), либо выполнил бы и вернул бы сумму, я бы не стал делать то и другое, это побочный эффект. – weston