Serenity, ve ile başlayan belirli rotalara yapılan tüm çağrıları işleyen DynamicScriptMiddleware adında özel bir ara yazılıma sahiptir .~/DynJS.axd/~/DynamicData/
Uzantı .axd, klasik ASP.NET'te genellikle bu tür işleyiciler için tercih edilen bir HTTP işleyicisi olarak tanımlandığı zamandan kalmadır .axdve IIS'de uzantısız URL'lerin eşlenmesi o zamanlar karmaşıktı.
DynJSgibi diğer bazı türlere ek olarak, Dynamic JSbaşlangıçtaki amacı yalnızca dinamik olarak oluşturulmuş Javascript'e hizmet etmek olduğundan, şu anda genişletilen Javascript'in kısaltmasıdır .CSSHTML Templates
Bu script dosyalarının içeriği esas olarak bazı global değişkenleri ayarlayarak sunucu tarafından istemci tarafına veri aktarmak için kullanıldı. Yani bunlar işlevler vb. içeren olağan komut dosyası blokları değil, yalnızca verileri ayarlamak için birkaç ifadeydi.
Son zamanlarda, esas olarak mobil uygulamalara yönelik olan veri alma yolunu DynamicScriptMiddlewareda yönetmeye başladı .~/DynamicDataJSON
Her ne kadar tarihi nedenlerden dolayı çağırılsak da Dynamic Scriptdaha çok günümüze benziyor Dynamic Content.
Arayüz IDynamicScript_
IDynamicScript , tüm dinamik komut dosyası (veya içerik) nesnelerinin uygulaması gereken soyutlamadır:
public interface IDynamicScript
{
string GetScript();
void CheckRights(IPermissionService permissions,
ITextLocalizer localizer);
string GroupKey { get; }
TimeSpan Expiration { get; }
}
Dinamik komut dosyası nesnesi, dinamik olarak oluşturulan içeriğini yöntem aracılığıyla döndürmelidir GetScript.
Dinamik içeriğin kaynağı, veritabanı sorgusuna kadar herhangi bir şey olabilir; uygulama kodunun kendisinden yansıma yoluyla oluşturulan bazı verilere.
CheckRightsgeçerli kullanıcının bu içeriğe erişimi olup olmadığını doğrulamak için dinamik komut dosyasının uygulaması gereken yöntemdir. Bunu bir özellik olarak düşünebilirsiniz Authorize.
GroupKeyönbellek geçersiz kılmak için kullanılır ve ÖnbelleklemeITwoLevelCache konusunda bahsettiğimiz arayüzle yakından ilgilidir . Yani, örneğin, bu, içeriğini bir tablodan üreten dinamik bir komut dosyasıysa , onu döndürmelidir, böylece bu tabloya bir işleyici aracılığıyla yeni bir Ülke eklendiğinde , dinamik komut dosyası verilerini yeniden yüklemelidir.CountryGroupKeyCreate
Expirationdinamik bir komut dosyasının önbellekte tutulması gereken süredir.
Arayüz IDynamicScriptManager_
IDynamicScriptManager'ı uygulayan sınıf, dinamik komut dosyalarının merkezi konumudur.
Kayıtlı dinamik komut dosyalarının bir sözlüğünü içerir. Her kayıtlı komut dosyasının benzersiz bir registration keyveya name. Arayüzü uygulayan bazı komut dosyası türleri INamedDynamicScriptönceden tanımlanmış adlarını sağlayabilirken, diğerlerinin kayıt sırasında belirtilmesi gerekir:
void Register(INamedDynamicScript script);
void Register(string name, IDynamicScript script);
Bir komut dosyası ilk kez kayıt adını belirterek istendiğinde, içeriği oluşturmak için yöntemini DynamicScriptManagerçağırır ve onu önbelleğe alır.GetScript
GetScriptBir dahaki sefere aynı komut dosyası istendiğinde, içeriğin süresi dolmadığı sürece yöntemi çağırmak yerine önbelleğe alınmış verileri döndürür .
Dinamik komut dosyası içeriklerini almak için şu yöntemleri sağlar:
string GetScriptText(string name, bool json = false);
IScriptContent ReadScriptContent(string name, bool json = false);
GetScriptTextİçeriği doğrudan metin olarak döndürürken, karma , son nesil zamanı, bayt dizisi olarak içerik, içeriğin Brotli/Gzip sıkıştırılmış sürümleri vb. gibi daha fazla ayrıntı sağlayan bir IScriptContentReadScriptContent nesnesi döndürür .
için varsayılan uygulama çağrı yoluyla IDynamicScriptManagerkaydedilir .Startup.csservices.AddDynamicScripts()
Dinamik Komut Dosyası Türleri
Aşağıdakileri içeren ancak bunlarla sınırlı olmayan bir dizi dinamik komut dosyası türü vardır:
- Sütun tanımları
- Form tanımları
- Aramalar
- Veri Komut Dosyaları (
UserData, gibiPermissionKeys) - Farklı Alan Değerleri
- Yerel Metin Komut Dosyası
- HTML Şablonları
- Komut dosyası paketleri
- CSS paketleri
Sonraki bölümlerde bunlardan bazılarını ziyaret edip açıklayacağız.
[LookupScript]Bu komut dosyası türlerinin çoğu, yansıma yoluyla keşfedilen , vb. gibi özel nitelikler aracılığıyla tanımlanır ve dosyaya çağrı [FormScript]yoluyla otomatik olarak kaydedilir .services.AddDynamicScripts()Startup.cs
Komut dosyası paketleri ve CSS paketi içerikleri dosyada tanımlanır appsettings.bundles.json.
Yerel metin komut dosyaları, site belirli bir dilde ilk kez görüntülendiğinde yavaş bir şekilde başlatılır ve kaydedilir.
Hizmetlere/Eylemlere Karşı Dinamik Komut Dosyaları
Bazı kullanıcılar, adından da anlaşılacağı gibi, her istekte dinamik içerik oluşturmak gibi Dynamicdinamik komut dosyaları kullanabileceğini düşünebilir ; örneğin, sorgu dizesi parametrelerine veya geçerli kullanıcı, kiracı vb. gibi bağlam değişkenlerine dayalı olarak farklı bir veri kümesi döndürmek.Services/Actions
Dinamik komut dosyaları, ilk kez istendiğinde oluşturulur ve aksi belirtilmedikçe, hem sunucu hem de istemci tarafında agresif bir şekilde önbelleğe alınır; böylece sonraki her istekte, geçerli kullanıcı veya sorgu dizesi parametrelerinden bağımsız olarak alınan içerik aynı olur.
Önbelleğe almayı devre dışı bırakmak ve parametrelendirilmiş gibi davranmalarını sağlamak için bazı geçici çözümler uygulamak mümkün olsa da, birincil avantajı kaybedersiniz ve dinamik komut dosyalarını amaçlanmadıkları bir şey için kötüye kullanırsınız.
Parametrelendirilmiş dinamik komut dosyalarına ihtiyacınız varsa bunun yerine uygun hizmetleri tanımlamanızı öneririz. Çünkü frequently changing datadinamik komut dosyaları NOT the right tool for the job. Bunları bir, belki iki kez vb. oluşturulan dinamik içeriğe sahip statik bir sözlük gibi düşünün.
Konu içerisinde bunu daha detaylı anlatmaya çalışacağız Lookups.