2012-04-12 2 views
1

몇 가지 내 도메인 클래스에서 공통적 인 몇 가지 방법이 있습니다. 복제 된 코드의 양을 줄이고 두 가지 해결책을 염두에 두었습니다 :

1) 일반적인 방법을 baseDomain 클래스에두고 내 도메인에있는 메소드를 상속받습니다.
2) 공통 메소드를 commonDomainMethodService에 넣습니다. 내 도메인으로 가져 오기

도메인이 공통적 인 속성을 공유하지 않는 한 상속 만 남겨 두어야한다고 생각합니다. 그러나 확실하지 않습니다. 이 방법들 중 하나가 다른 것보다 유익한가요? Grails 베스트 프랙티스에 맞춰 하나입니까?

파라미터에 기초하여 두 개의 도메인 인스턴스를 비교하는 방법으로서, I 사용할 것이다 경우 들어
일반적인 도메인 방법에 대한 상속 또는 서비스?

int compareInstances(instance, otherInstance, propertyName){ 
    return //some logic to compare the instances based on the type of property 
} 
+1

구현할 필요가있는 메소드 유형의 예를 들려 줄 수 있습니까? –

+2

정말 당신이 처리하는 논리의 종류에 따라 다릅니다. 문제의 코드 중 일부를 게시 할 수 있다면 _TON_에 도움이됩니다. – cdeszaq

+0

예를 들어 도메인의 두 인스턴스가 제공되고 매개 변수로 제공되는 속성을 기반으로 비교하는 방법입니다. – Weezle

답변

3

Mixin : Mixin Reading 예컨대 Further Mixin Reading

:

@Mixin(MyCompare) 
class DomainA { 
} 

@Mixin(MyCompare) 
class DomainB { 
} 

class MyCompare { 

    def compare(instance1, instance2, propertyName) { 
     instance1[propertyName] == instance2[propertyname] 
    } 
} 

이제 DomainA 및 DomainB의 모든 인스턴스에는 compare 메소드가 있습니다. 이 방법으로 여러 개의 Mixin을 구현하여 수퍼 클래스를 확장하거나 서비스에 구현하지 않고도 원하는 도메인 클래스에 기능을 추가 할 수 있습니다. mixin 년대에서

1) 개인 방법없는 것 :

일부 잠재적 인 둘점가 (난 당신이 compare 방법은 좀 더 정교한이보다 싶어한다고 가정 거라고하지만 당신은 아이디어를 얻을) 작업. mixin의 순환 종속성을 갖는

2) :) 다른 mixin 년대에 혼합의 년대는 나쁜 MixinClassA이 MixinClassA에 혼합 MixinClassB에 믹스 (사용자의 설정에 당신이 mixin 것 생각하지 않는다 '의.

3) 메소드 충돌로 어떤 일이 일어나는지 잊어 버려서 실험 해봐야합니다. 예 : ClassA에는 doStuff() 메소드가 있으며 doStuff() 메소드가있는 DoStuffMixin을 혼합합니다.

4) mixin으로 사용하는 클래스에서 mixin을 사용하는 객체의 인스턴스가 될 this을 참조 할 수 있습니다. 예를 들어 위의 예에서 instance1을 제거하고 this으로 바꿀 수 있습니다. 런타임에 this은 DomainA 또는 DomainB의 인스턴스가 될 것입니다. (이것은 믹스 인의 매우 강력한 부분입니다.)

내가 생각할 수있는 큰 문제가 있습니다.

+0

우스꽝스럽고 배우기 좋은 선량. 독서를 제공해 주셔서 감사합니다. Grails와 Mixin을 사용하려고 할 때 어떤 문제가 있는지 알고 있습니까? – Weezle