Saya membaca buku "Learning TypeScript" oleh Remo Jansen. Dalam satu bagian penulis menjelaskan cara membuat kerangka kerja yang sangat sederhana bukti-of-konsep MVC termasuk cara membuat Model
kelas dan mengatakan berikut:
Sebuah model perlu disediakan dengan URL layanan web yang digunakannya. Kita akan menggunakan dekorator kelas bernama ModelSettings untuk mengatur URL layanan yang akan dikonsumsi. Kami dapat menyuntikkan URL layanan melalui konstruktornya, tetapi dianggap praktik yang buruk untuk menyuntikkan data (sebagai lawan perilaku) melalui konstruktor kelas .
Saya tidak mengerti kalimat terakhir itu. Secara khusus, saya tidak mengerti apa artinya "menyuntikkan data". Tampak bagi saya bahwa di hampir semua pengantar kelas JavaScript menggunakan contoh yang terlalu disederhanakan, data dimasukkan ("disuntikkan"?) Ke dalam konstruktor melalui parameternya. Sebagai contoh:
class Person {
constructor(name) {
this.name = name;
}
}
Saya tentu berpikir name
sebagai data, bukan sebagai perilaku, dan itu secara universal dimasukkan dalam contoh semacam ini sebagai parameter konstruktor, dan tidak pernah disebutkan bahwa ini adalah praktik yang buruk. Karena itu saya menganggap saya salah paham tentang sesuatu dalam kutipan di atas, baik yang dimaksud dengan "data" atau "menyuntikkan" atau yang lainnya.
Jawaban Anda dapat mencakup penjelasan tentang kapan, di mana, bagaimana dan mengapa menggunakan dekorator dalam JavaScript / TypeScript, karena saya sangat curiga bahwa konsep tersebut terkait erat dengan pemahaman yang saya cari. Namun, yang lebih penting, saya ingin memahami secara lebih umum apa yang dimaksud dengan menyuntikkan data melalui konstruktor kelas dan mengapa itu buruk.
Untuk memberikan lebih banyak konteks pada kutipan di atas, inilah situasinya: Sebuah Model
kelas dibuat yang, dalam contoh ini, akan digunakan untuk membuat model pertukaran saham, satu untuk NASDAQ dan satu untuk NYSE. Setiap model memerlukan jalur layanan web atau file data statis yang akan menyediakan data mentah. Buku ini menyatakan bahwa dekorator harus digunakan untuk informasi ini, daripada parameter konstruktor, yang mengarah ke yang berikut:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
Saya hanya belum mengerti mengapa saya harus menambahkan url layanan melalui dekorator daripada hanya sebagai parameter untuk konstruktor, misalnya
constructor(metiator : IMediator, serviceUrl : string) {...