Remo Jansen'in "Learning TypeScript" kitabını okuyorum. Bir bölümde yazar, Model
sınıfın nasıl oluşturulacağı da dahil olmak üzere çok basit bir kavram kanıtı MVC çerçevesinin nasıl oluşturulacağını açıklar ve şunları söyler:
Bir modelin, kullandığı web hizmetinin URL'siyle birlikte sağlanması gerekir. Tüketilecek hizmetin URL'sini ayarlamak için ModelSettings adlı bir sınıf dekoratörü kullanacağız. Hizmet URL'sini yapıcısı aracılığıyla enjekte edebiliriz, ancak bir sınıf yapıcısı aracılığıyla veri (bir davranışın aksine) enjekte etmek kötü bir uygulama olarak kabul edilir .
O son cümleyi anlamadım. Özellikle, "veri enjekte etmenin" ne anlama geldiğini anlamıyorum. Bana öyle geliyor ki, aşırı basitleştirilmiş örnekler kullanan JavaScript sınıflarına neredeyse tüm girişlerde, veriler, yapıcıya parametreleri aracılığıyla ("enjekte edildi"?) Örneğin:
class Person {
constructor(name) {
this.name = name;
}
}
Kesinlikle name
veri olarak düşünürüm, davranış olarak değil ve evrensel olarak bu tür bir örneğe bir yapıcı parametresi olarak dahil edilir ve bunun kötü uygulama olduğuna dair hiçbir söz yoktur. Bu nedenle, ya "veri" ya da "enjekte" ya da başka bir şeyle kastedilen, yukarıdaki alıntıdaki bir şeyi yanlış anladığımı varsayıyorum.
Yanıtlarınız, JavaScript / TypeScript'te dekoratörlerin ne zaman, nerede, nasıl ve neden kullanılacağına ilişkin açıklamaları içerebilir, çünkü bu kavramın aradığım anlayışla yakından bağlantılı olduğundan şüpheleniyorum. Ancak, daha da önemlisi, bir sınıf yapıcısı aracılığıyla veri enjekte etmenin ne anlama geldiğini ve bunun neden kötü olduğunu daha iyi anlamak istiyorum.
Yukarıdaki alıntıya daha fazla bağlam vermek için durum budur: Model
Bu örnekte, biri NASDAQ diğeri NYSE için borsa modelleri oluşturmak için kullanılacak bir sınıf yaratılır. Her model, ham verileri sağlayacak web hizmetinin veya statik veri dosyasının yolunu gerektirir. Kitap, bir yapıcı parametresi yerine bu bilgi için bir dekoratörün kullanılması gerektiğini belirtir ve aşağıdakilere yol açar:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
Sadece neden hizmet url'sini sadece kurucu için bir parametre olarak değil dekoratör aracılığıyla eklemem gerektiğini anlamıyordum, örn.
constructor(metiator : IMediator, serviceUrl : string) {...