Ana içeriğe atla

Dynamic Scripts

 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 nameArayü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, gibi PermissionKeys)
  • 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 jobBunları 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.

Bu blogdaki popüler yayınlar

Code generetor ile oluşturulan dosyaların açıklamaları

  1. Sunum (Presentation/UI) Katmanı (Kullanıcı arayüzü - HTML, TypeScript, Dialog, Grid) 🔹 XYZPage.ts 📌 Ne İşe Yarar? Kullanıcı arayüzünün TypeScript tarafındaki tanımıdır. Serenity'nin Dialog ve Grid bileşenlerini içeren bir TypeScript sınıfıdır. 📌 Çok Katmanlı Mimarideki Yeri: Sunum Katmanı (Presentation Layer) Kullanıcıdan veri almak ve göstermek için kullanılır. 🔹 XYZGrid.ts 📌 Ne İşe Yarar? Tablo (Grid) yapısını oluşturur ve verileri listeler. Filtreleme, sıralama ve sayfalama işlemleri için kullanılır. columnsKey ile hangi kolonların gösterileceğini belirler. 📌 Çok Katmanlı Mimarideki Yeri: Sunum Katmanı (Presentation Layer) Kullanıcının verileri listelediği ve etkileşimde bulunduğu yerdir. 🔹 XYZDialog.ts 📌 Ne İşe Yarar? CRUD (Create, Read, Update, Delete) işlemlerini yöneten pencere (modal) bileşeni Kullanıcı form aracılığıyla veri ekler, günceller veya siler. XYZForm.cs ile birlikte çalışır. 📌 Çok Katmanlı Mimarideki Yeri: Sunum Katmanı (Presentation Layer) Kull...

Serenity Web Nedir?

   Serenity  , açık kaynak teknolojileri üzerine kurulu bir ASP.NET Core/TypeScript uygulama platformudur. Standart kodlardan kaçınarak, tekrarlanan görevlere harcanan zamanı azaltarak ve en iyi yazılım tasarımı uygulamalarını uygulayarak bakım maliyetlerini düşürürken geliştirmeyi kolaylaştırmayı amaçlamaktadır. Serene  , Serenity platformunu temel alan ücretsiz, açık kaynaklı başlangıç ​​uygulama şablonumuzdur.  Bu dokümantasyon aracılığıyla eğitimimiz ve diğer örnekler için esas olarak Serene'yi kullanacağız. StartSharp  , ücretli müşterilerimize sunduğumuz premium uygulama şablonudur.  Daha gösterişli bir temaya ve bazı ekstra özelliklere  ek olarak Serene'deki her şeyi içerir  .  İkisi de Serenity platformunu temel alıyor. Adında Ne Var Serenity'nin sözlük anlamları  barış  ,  rahatlık  ve  sakinliktir  . Serenity ile bunu başarmaya çalışıyoruz.  Umarız yükledikten ve kullandıktan sonra siz de bu ş...