2017-10-04 1 views
0

나는 약간의 용어를 잘못 들었을 지 몰라도, 내가 묻는 것은 다음과 같다 :더 많은 전역 개체 생성자를 사용하는 것이 더 좋습니까? 아니면 하나의 개체로 그룹화해야합니까?

어느 것이 의미 론적으로 더 나은가?

비슷한 개체에 대해 여러 생성자를 사용하여 접두사 (Parent)를 사용하여 개체를 그룹화합니다.

function ParentChildA (val) { 
    this.val = val+'a'; 
} 

function ParentChildB (val) { 
    this.val = val+'b'; 
} 

new ParentChildA (val); 
new ParentChildB (val); 

또는 하나의 개체 아래에 빈 Parent 개체를 사용하여 개체를 그룹화합니다.

Parent = {}; 

Parent.childA = function(val) { 
    this.val = val+'a'; 
} 

Parent.childB = function(val) { 
    this.val = val+'b'; 
} 

new Parent.ChildA (val); 
new Parent.ChildB (val); 

그룹화를 위해 빈 컨테이너 객체를 만드는 것이 좋지 않습니까? 나는 큰 꼬마 코더가되고, 글로벌 네임 스페이스를 오염시키지 않으려 고 노력하고있다.

+0

그룹화하려는 경우에도 프로토 타입 개체에 그룹화하지 않아야합니다. – Bergi

+0

"비슷한 대상"이란 정확히 무엇을 의미합니까? 상속을 찾고 있습니까? Btw, 당신이 보여준 두 예제 함수는 정확히 동일합니다. – Bergi

+0

내 의견을 약간 편집하여 내 코드를 편집했습니다. – stackers

답변

0

정말 당신이 그들과 함께하고있는 것에 달려 있습니다. 객체는 유지 보수성과 유용성을 위해 항상 구조화되어야합니다. 따라서 특별한 경우에는 사용과 유지가 더 쉬워 질 것입니다.

모든 언어로 객체 디자인을 할 때 확실하고 명확한 답변은 없지만 구조를 계획 할 때 고려해야 할 몇 가지 일반적인 원칙이 있습니다.

  1. 당신은 직관적으로 비슷한 것들을 함께 유지하고 싶습니다. 자식 개체를 찾고하는 것은 너무 긴 시간이 소요
    1. :
    2. 당신은 어떤 개체가 너무 많은 복잡성을 갖고 싶어하지 않습니다.
    3. 어린이 이름이 충돌하기 시작합니다.
  2. 개체 간의 메시지를 단순하고 최소화하고자합니다. 즉, "사람"개체를 말한 경우 run(person)walk(person)과 같은 다른 개체에 메시지로 개체를 전달할 필요없이 person.run()person.walk()이 필요할 수 있습니다. OTOH 당신은 사람들에게 많은 아이들을 가질 수 있습니다. person.movement.run()person.movement.walk()을 가지고있는 것이 합리적입니다. 그래서 사람 밑에있는 것들의리스트는 적당한 크기입니다.

이상적으로 당신은 몇 분, 브레인 스토밍을위한 중지 할 및 개체가해야하고 사용 및 그 사용 사례에 맞는 무언가를 설계 할 일들을 계획입니다. 필연적으로 추가 및 변경이있을 수 있지만 조금만 계획하려고하면 리팩토링을 제한하는 데 도움이됩니다.

성능 차이에 대해 묻는다면 이는 내 전문 지식이 아니지만 일반적으로 대부분의 경우 처리 능력이 충분하기 때문에 무시해도 좋습니다.

디자인에 대한 심층적 인 가이드가 필요한 경우 많은 훌륭한 리소스가 있습니다. Bob Martin's Principles of OOD is a good place to start.

+0

하지만 개와 비슷한 꽤 비슷한 개 개체를 추가하면 .walk () 및 .run()을 함께 그룹화 하시겠습니까? 아니면 우리가 10 마리의 다른 동물을 추가하는 것과 같은 것이 많습니까? 이것들이 그룹화되지 않았다면 모두 글로벌 네임 스페이스에있을 것이라는 점을 명심하십시오, 그렇게하는 것이 내 이유입니다. – stackers

+0

그럼 run()은 실제로 무엇을합니까? 각 동물마다 독특한 달리기가 있습니까? 인간과 개는 속도 나 움직임 패턴에 관해서는 달랐습니다. OTOH run()이 공백에있는 객체에 대한 변위 벡터를 실행하고 있다면 아마도 animal.run() 및 animal.type = person 또는 global run()을 가질 것입니다. 제가 말하려고했던 것처럼, 완벽한 답이 없습니다. 당신은 어떻게 당신이 객체를 어떻게 사용할 것인지 이해해야합니다. – TheAtomicOption

관련 문제