여기에 문제가 있습니다. 우리가 비디오 게임을하고 있고 의존성 주입을 사용한다고 가정 해 보겠습니다. 여기에 우리가 무엇 : 나는 의존성 주입을 할 때 내 캐릭터 자체를 만들 위치를 알 수있는 정보를했을 있도록종속성 삽입은 안티 패턴 체인 체인입니까?
Game Class // This is just the code to keep track of the overall game logic
Character Class // This would be the guys in the game, good and bad guys both
Weapon Class // The weapons for the characters
그래서 일반적으로 내가 문자로 현재지도에 위치, 게임 상태를 주입 것, 캐릭터를 가지고 무기를 만들고 무기의 강도에 대한 값을 주입하고 게임 클래스 등 다른 일반적인 게임 상태를 주입합니다.
이것은 거의 내게 반 패턴 같아 보입니다. . 나는 그것이 매우 부서지기 쉽고 변경하기가 어렵다는 (적어도 나에게는 그렇게 보인다) 코드를 가지고 있기 때문에 그렇게 말하고있다. 전달되는 게임 상태 정보를 변경하려면 세 가지 클래스를 모두 변경해야합니다. Game 클래스를 원래대로 변경 한 다음 Character를 수정 한 다음 Weapon 클래스도 수정합니다. 이것은 특히 여기 3 개가 아닌 5 개 레벨의 깊은 곳으로 가면 많은 일입니다. 그래도 DI 테스트보다 단위 테스트가 쉽습니다.
이것은 다시 나쁜 습관처럼 들립니다. 이것은 일반적으로 일이 이루어지는 방식입니까? 우리는 일종의 'MotherShip'패턴을 가졌습니다. 모든 것이 최상위 레벨에 있습니다. 그래서 게임을 만드는 대신에 캐릭터가 무기를 만들어 게임 (또는 다른 클래스)이 모든 것을 만들도록합니다.
이 방법으로 캐릭터에 새로운 무기를 추가하고 싶다면 게임 클래스가 무기를 만들어 주입 할 수 있습니다. 이것에 무엇을해야할지 모르겠습니다. 감사합니다
디자인 문제는 당신이 이미 올바른 방법을 알고 있기 때문에 당신에게 이해가되지 않을 것이라고 생각합니까? 그것은 단지 추측입니다. 나는 아직도 각 학교가 많은 하위 클래스를 소유하고 있다고 생각하는 오래된 학교 OO에 집착하고 있다고 생각합니다 (세계에는 집, 집 사람들, 사람들에게는 옷 등이 있습니다). 귀하의 충고는 나에게 의미가 있습니다. 캐릭터는 무기에 대한 지식이 있어야한다고 생각하지만 캐릭터를 주입 할 수 있습니다. 공장 패턴에 대한 정보 주셔서 감사합니다. 내가 보통 직면하는 경우는 단지 하나의 인스턴스가 될 것입니다. 이 예가 제가 가진 최고의 것입니다. –
주의해야 할 것은 실제로 오브젝트가 실제로 생성되는 위치에주의를 기울이는 것입니다. "새"키워드를 사용하면 단일 구현으로 자신을 잠그므로이를 제어해야합니다. 또한 객체를 생성 한 사람은 책임을 가진 다른 사람에게 객체를 전달할 때까지 객체를 작성한 사람이 책임을집니다. {House, Person, Clothes} 예에서 옷 유형의 객체는 다른 곳에 만들어 져서 Person 객체 나 House 객체에 지정되어야합니다. – tster
그래, 내 문제 였어. 나는 의존성을 거꾸로 가지고 있었다. 전에 비슷한 질문을했고 많은 사람들은 의존성 체인이 완벽하게 정상이라고 생각했기 때문에 이것이 모든 사람에게 실제로 알려지지 않았다고 가정합니다. 적절한 종속 질서와 이것들과 같은 중요한 관행을 실제로 다루는 것에 대해 알고있는 어떤 원칙이나 책이 있습니까? 감사합니다. –