2012-04-25 5 views
0

Java를 사용하고 있었기 때문에이 설정이 괜찮은지 또는 올바른 방법인지 궁금해했습니다.Java OOP : 객체 트리/객체 패밀리 구성

FYI의 userResults는 아래 코드에없는 JDBI 변수를 참조합니다.

더 나은 방법을 제안 해 주시기 바랍니다, 감사합니다.

public class Stat 
{ 
private int current; 
private int max; 

public int getCurrent() {return current;} 
public void setCurrent(int current) {this.current = current;} 

public int getMax() {return max;} 
public void setMax(int max) {this.max = max;} 
} 


public class Character 
{ 
Stat hp = new Stat(); 
Stat mp = new Stat(); 
} 

Character thisCharacter = new Character(); 

// Set the value of current & max HP according to db data. 
thisCharacter.hp.setCurrent((Integer) userResults.get("hpColumn1")); 
thisCharacter.hp.setMax((Integer) userResults.get("hpColumn2")); 

// Print test values 
System.out.println (thisCharacter.hp.Current); 
System.out.println (thisCharacter.hp.Max); 
+2

이 질문은 [codereview 스택 교환 사이트] (http://codereview.stackexchange.com/)에서 더 나은 견인력을 얻게 될 것입니다. – Spoike

+0

현재 구현에 적합한 방법이 있습니까? codereview? – Tobi

답변

1

맞습니까? 글쎄, 작품? 그런 다음 이 올 Y 르고입니다.

웨더이든 아니든간에 괜찮은 대답은 "어쩌면"입니다. 이 코드에서 어떤 맥락에서 얘기하기 어렵다하지만 마음에 유지할 수있는 몇 가지 생각이 있습니다.

  • 하는 클래스 (또는 오히려 객체)에서 Stat 세트에? 이 작업을 수행하고 그것을 가져올 데이터베이스 값을 알고있는 클래스의 책임이라고 생각하십니까? 그렇지 않다면, 이것을하는 일종의 클래스를 만드는 것을 고려하십시오.
  • thisCharacter.hp.setCurrent(...)과 같은 연결 전화는 principle of least knowledge의 위반입니다. 때때로 당신은 그것을 도울 수 없지만, 보통 그것은 끈적 거리는 코드로 연결됩니다. 통계를 둘러싼 모든 논리를 처리하는 것을 고려하십시오. 코드에서 loadStats(), saveStats()takeDamage(int dmg)revive(int health)과 같은 변형 연산자 동작과 같은 메서드가있는 HealthStatsHandler이 필요할 수 있습니다.
  • 올바른 개체 디자인이있는 경우 문제가 발생하는 경우 SOLID principles에서 공부하십시오. 그들은 확장 가능하고 "깨끗한"코드를 원한다면 모든 개발자가 따라야하는 훌륭한 지침을 제공합니다.
+0

+1이 원칙은 높은 응집력을 가진 수업을 성취하려는 시도와 인라인으로 간주 될 수 있습니다. 맞습니까? – Brady

+1

예, [낮은 커플 링] (http://en.wikipedia.org/wiki/Coupling_(computer_programming)) 및 [높은 결합력 (http://en.wikipedia.org/wiki/Cohesion_ (computer_science))을 위해 노력하십시오. . 대부분의 소프트웨어 공학 학교가 가르쳐야 만하지만 내 마음에 거의 실패합니다. – Spoike

0

이것은 실제로 나무가 아닙니다. 두 명이 둘 이상의 자식 계층을 가질 수는 없습니다.

보통 당신은 인터페이스가 모두 StatCharacter 그것을 구현하고 Character의 두 아이는 유형 Node을했을 경우의이 Node를 호출하도록 정의합니다.

0

나는 별도로 스탯 객체를 생성하고 문자로 전달하고, 문자를 다음과 같이 개인 속성을 만드는 고려할 것 :

public class Character 
{ 
    private Stat hp; 
    private Stat mp; 

    public Stat getHp()   {return hp;} 
    public void setHp(Stat h) {this.hp = h;} 

    public Stat getMp()   {return mp;} 
    public void setMp(Stat m) {this.mp = m;} 
} 

// Set the value of current & max HP according to db data. 
Stat hp = new Stat(); 
hp.setCurrent((Integer) userResults.get("hpColumn1")); 
hp.setMax((Integer) userResults.get("hpColumn2")); 

Character thisCharacter = new Character(); 
thisCharacter.setHp(hp); 
// do the same for mp 

하나 추가 간단한 단계는 걸릴 것 Character 생성자를 생성하는 것입니다 hpmp