2014-02-13 1 views
0

개체 데이터 공유에 대한 몇 가지 생각이 있습니다.개체간에 데이터 공유, 바인딩 속성

  • P1, P2 속성 클래스 C을 정의 할 수 있습니다 (불변이라고 생각 할 수 있습니다).
  • 는 클래스 C의 일부 개체 XY을 가지고 있습니다.
  • 속성 GP1을 가지고 클래스 C. 은 "용기"G의 개체에 대한 G"컨테이너"의 일종을 만들 수 있습니다.
  • 오브젝트 X에 "컨테이너"G 및G.gp1 값 "바인딩"X.p1를 추가 할 수 있습니다. (바인딩 객체 X 시도 재산 P1의 값을 얻을 때 GP1의 값을 가져옵니다 말할 않습니다.)
  • 가의 컨테이너 G와 "바인딩"Y.p1에 반대 Y를 추가하자 G.gp1 값.

당신은 인간에 대한 단순한 종류의 것이라고 생각할 수 있습니다.

내가 생각하는 유일한 아이디어는 p1, p2 속성 액세스에 대한 인터페이스를 만드는 것입니다. 그런 다음 클래스 C (공유 데이터 없음) 및 클래스 GC (컨테이너 데이터 포함)에 인터페이스를 구현하십시오. 그런 다음 객체를 장식하여 메서드를 추가합니다.

각 바인딩에서 볼 수 있듯이 인터페이스 + 인터페이스 구현을 추가합니다. Thats 많이 쓰고 추한.

질문 : 모든 개체에 대해 이러한 종류의 바인딩 작업을 만드는 방법은 무엇입니까? (DSL을 구현하지 않고 C에서 파생 된 langauges : java, C#, C++, PHP 등)

+0

것을 당신은 HTTP에 관심이있을 수 있습니다하십시오 : // EN .wikipedia.org/wiki/Law_of_Demeter –

+0

링크를 가져 주셔서 감사합니다. – user1759572

+0

클래스에 필드를 갖고 다른 클래스의 다른 필드를 getter로 반환하는 의미는 무엇입니까? 그것은 매우 위험한 공사입니다. – Gangnus

답변

0

어디서 문제가 발생합니까? 그리고 p2는 무엇입니까?

static class G{ 
    int gp1; 
} 
static class C{ 
    int p1,p2; 
    G provider; 
    C(G provider){ 
     provider=this.provider; 
    } 
    int getP1(){ 
     return provider.gp1; 
    } 
} 
static class X extends C{ 
    X(G provider){ 
     super(provider); 
    } 
} 
static class Y extends C{ 
    Y(G provider){ 
     super(provider); 
    } 
} 

우리가 해당 인터페이스로 공급자를 제공해야만 영혼을 보편적으로 볼 수 있습니다. 그러나 당신은 그것을 사용하고 싶지 않습니다. 인터페이스가없는 범용 솔루션은 여기에서 불가능합니다.

interface IProvider{ 
    int getGp1(); 
} 
static class G implements IProvider{ 
    private int gp1; 
    int getGp1(){return gp1}; 
} 
static class C{ 
    int p1,p2; 
    IProvider provider; 
    C(IProvider provider){ 
     provider=this.provider; 
    } 
    int getP1(){ 
     return provider.gp1; 
    } 
} 
static class X extends C{ 
    X(G provider){ 
     super(provider); 
    } 
} 
static class Y extends C{ 
    Y(G provider){ 
     super(provider); 
    } 
} 

그리고, 통지, 클래스의 필드를 가진 다른 클래스의 다른 필드 게터에 의해 반환하는 것은 매우 비 직관적이고 위험한 건설

+0

문제는 X와 Y가 특정 컨테이너에 대해 구성되어 있으며 X 없이는 사용할 수 없다는 것입니다. 보편적 인 객체를 만들기 위해서는 더 많은 클래스를 생성해야하고, 내가 원하지 않는 클래스를 생성해야합니다. – user1759572

+0

@ user1759572 우리는 인터페이스로 공급자를 제공 할 때만 보편적 일 수 있습니다. 그러나 당신은 그것을 사용하고 싶지 않습니다. 인터페이스가없는 범용 솔루션은 여기에서 불가능합니다. – Gangnus

관련 문제