0
는 그래서, 나는 두 개의 클래스, 그 각각이 있다고 가정 해 보자는 서로를 필요로
Department.js : 이제
const Person = require("./Person");
class Department{
constructor(id){
this.personel = getPersonel(id).map(person => new Person(person));
}
}
Person.js
const Department = require("./Department");
class Person {
constructor(id){
this.department = new Department(getDeptOfPerson(id));
}
}
const person = new Person(1);
const coworkers = person.department.personel;
, 이것은 작동하지 않으며, 나는 왜 이해할 수 있습니다. "Person"은 Department.js의 생성자가 아닙니다. 그러나 두 파일을 같은 파일에 넣으면 잘 작동합니다.
그래서; 내 질문은이 문제를 어떻게 해결할 수 있을까요? 나는이 두 클래스를 같은 파일에 보관하지 않을 것입니다. 더 좋은 방법이 있습니까?
저는 최신 버전의 노드를 실행하고 있습니다.
순환 종속성이있는 경우 잘못된 결과가 발생합니다. Person이 새로운 Department를 생성해야하고 Department가 새로운 Person을 생성해야하는 경우 두 클래스 모두 책임이 너무 많습니다 (자신을 생성해야 함). 각각의 클래스가 인스턴스를 직접 인스턴스화하는 대신 Person 및 Department의 인스턴스를 만들고 인스턴스를 올바른 인스턴스로 전달하는 세 번째 팩토리 클래스가 이상적입니다. 마찬가지로 귀하의 코드가 너무 단단히 결합되어 별도의 클래스가 중복되는 것처럼 보입니다. – Fraser
@Fraser 문제를 다시 푸시하지 않기 위해 공장을 어떻게 디자인해야하는지 이해할 수 없습니다. 내 마음 속에서'Department'는 Person의 모든 메소드를 가진'Person'을 반환 할 속성'Personel'을 가질 것이고, Person이 재산을 가질 것이라는 것도 이해할 것입니다. 'Department "마녀는 부서에서 사용할 수있는 방법을 가지고 있습니다 ... 그러나 같은 클래스에 둘 다 가지고있는 것은 나에게 어떤 의미가 없으므로 중복성이 보이지 않습니다 ... –
주어진 답을보기 a 팩토리 패턴은 소프트웨어 설계에서 상당히 일반적이며, 디커플링 클래스의 개념이기도합니다. 여기 findDepartment, findPerson은 관련 엔티티의 생성자 클래스로 작동합니다. 사람과 부서가 느슨하게 결합되어 있음을 의미합니다. – Fraser