Remo Jansen의 "Learning TypeScript"책을 읽고 있습니다. 한 섹션에서 저자는 Model
클래스 를 만드는 방법을 포함하여 매우 간단한 개념 증명 MVC 프레임 워크를 만드는 방법을 설명 하고 다음과 같이 말합니다.
사용하는 웹 서비스의 URL이 모델에 제공되어야합니다. 사용할 서비스의 URL을 설정하기 위해 ModelSettings라는 클래스 데코레이터를 사용할 것입니다. 우리는 생성자를 통해 서비스 URL을 주입 할 수 있지만 클래스 생성자를 통해 (행동이 아닌) 데이터를 주입하는 것은 나쁜 습관으로 간주됩니다 .
나는 그 마지막 문장을 이해하지 못한다. 특히, "데이터 주입"의 의미를 이해하지 못합니다. 지나치게 단순화 된 예제를 사용하는 JavaScript 클래스에 대한 거의 모든 소개에서 매개 변수를 통해 생성자에 데이터가 도입됩니다 ( "주입"?). 예를 들면 다음과 같습니다.
class Person {
constructor(name) {
this.name = name;
}
}
필자는 확실히 name
행동이 아닌 데이터 라고 생각하며 , 이러한 유형의 예제에는 일반적으로 생성자 매개 변수로 포함되며 이것이 나쁜 습관이라는 언급은 없습니다. 따라서 위의 인용문에서 "데이터"또는 "주입"또는 다른 의미로 잘못 이해하고 있다고 가정합니다.
답은 개념이 내가 추구하는 이해와 밀접하게 관련되어 있다고 생각하기 때문에 JavaScript / TypeScript에서 데코레이터를 언제, 어디서, 어떻게, 왜 사용하는지에 대한 설명을 포함 할 수 있습니다. 그러나 더 중요한 것은 클래스 생성자를 통해 데이터를 주입하는 것이 무엇을 의미하고 왜 나쁜지를 이해하고 싶습니다.
위의 인용문에 더 많은 맥락을 제시하기 위해 상황은 다음 Model
과 같습니다.이 예에서는 NASDAQ 용과 NYSE 용으로 증권 거래소 모델을 작성하는 데 사용되는 클래스가 작성됩니다. 각 모델에는 원시 데이터를 제공 할 웹 서비스 또는 정적 데이터 파일의 경로가 필요합니다. 이 책에서는 생성자 매개 변수가 아닌 데코레이터를이 정보에 사용해야한다고 설명합니다.
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
방금 생성자에 대한 매개 변수가 아닌 데코레이터를 통해 서비스 URL을 추가 해야하는 이유를 이해하지 못했습니다.
constructor(metiator : IMediator, serviceUrl : string) {...