Tôi đang đọc cuốn sách "Học tập TypeScript" của Remo Jansen. Trong một phần, tác giả mô tả cách tạo một khung MVC bằng chứng rất đơn giản bao gồm cách tạo Model
lớp và nói như sau:
Một mô hình cần được cung cấp với URL của dịch vụ web mà nó tiêu thụ. Chúng tôi sẽ sử dụng một trình trang trí lớp có tên ModelSinstall để đặt URL của dịch vụ sẽ được sử dụng. Chúng ta có thể tiêm URL dịch vụ thông qua hàm tạo của nó, nhưng nó được coi là một hành vi xấu khi tiêm dữ liệu (trái ngược với hành vi) thông qua một hàm tạo của lớp .
Tôi không hiểu câu cuối cùng đó. Cụ thể, tôi không hiểu ý nghĩa của việc "tiêm dữ liệu". Đối với tôi, dường như trong hầu hết tất cả các giới thiệu về các lớp JavaScript sử dụng các ví dụ đơn giản hóa quá mức, dữ liệu được đưa vào ("được chèn"?) Vào hàm tạo thông qua các tham số của nó. Ví dụ:
class Person {
constructor(name) {
this.name = name;
}
}
Tôi chắc chắn nghĩ về name
dữ liệu, không phải là hành vi và nó được bao gồm phổ biến trong ví dụ này như là một tham số của hàm tạo, và không bao giờ có bất kỳ đề cập nào rằng đây là thực tiễn xấu. Do đó, tôi cho rằng tôi đang hiểu nhầm một cái gì đó trong đoạn trích dẫn trên, có nghĩa là "dữ liệu" hoặc "tiêm" hoặc một cái gì đó khác.
Câu trả lời của bạn có thể bao gồm các giải thích về thời điểm, địa điểm, cách thức và lý do sử dụng trang trí trong JavaScript / TypeScript, vì tôi nghi ngờ rằng khái niệm này có liên quan mật thiết đến sự hiểu biết mà tôi tìm kiếm. Tuy nhiên, quan trọng hơn, tôi muốn hiểu chung hơn về ý nghĩa của việc tiêm dữ liệu thông qua một trình xây dựng lớp và tại sao điều đó lại xấu.
Để cung cấp thêm ngữ cảnh cho trích dẫn ở trên, đây là tình huống: Một Model
lớp được tạo ra, trong ví dụ này, sẽ được sử dụng để tạo các mô hình trao đổi chứng khoán, một cho NASDAQ và một cho NYSE. Mỗi mô hình yêu cầu đường dẫn của dịch vụ web hoặc tệp dữ liệu tĩnh sẽ cung cấp dữ liệu thô. Cuốn sách nói rằng một trang trí nên được sử dụng cho thông tin này, chứ không phải là một tham số của nhà xây dựng, dẫn đến những điều sau đây:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
Tôi chỉ không hiểu tại sao tôi nên thêm url dịch vụ thông qua trình trang trí chứ không chỉ đơn giản là một tham số cho hàm tạo, ví dụ:
constructor(metiator : IMediator, serviceUrl : string) {...