2011-06-07 40 views
6

ASP.NET C# 2.0 ile kullanıyorum. Bir veritabanı için bazı nesneler oluşturdum ve bu nesnelerin her biri doğal olarak adlandırılabilecek veya benzer bir şekilde çağrılan ve bunlardan bir RESTful JSON API'si yaratan özelliklere sahip.Sunucu tarafı ve istemci tarafı yöntemi

Bu sitede 'modülleri' olarak adlandırmaktan hoşlandığım çok sayıda sekme gibi bir şey var - bir modülün işlevi, sayfada görüntülenecek HTML'ye veri dönüştürmektir. İdeal olarak, bu işlemin yüklenecek ilk sekme için hem sunucu tarafı C# kodunda yapılması gerekir, daha sonra sekmeler tıklandığında diğerlerini yüklemek için Ajax'ı kullanın, ancak eski tarayıcılar ve arama motorları için, sekme yine de aynı HTML kodu sunucu tarafı.

Şu anda JavaScript kodunu, her bir modülü HTML'ye dönüştüren C# kodundan tamamen ayrı yazıyorum, ancak yöntem hemen hemen aynı, yalnızca farklı bir dil. Bu örneğe benzer.

C# kodu

public override string GetHtml() 
{ 
    IJsonObjectCollection<Person> response = ((Village)page).People; 
    string html = "<div id=\"test\">"; 
    foreach (Person person in response) 
    { 
     html += "<div class=\"person\">"; 
     html += person.Name; 
     if(canEdit) html += "*"; 
     html += "</div>"; 
    } 
    return html + "</div>"; 
} 

JavaScript Bu soru ile nereye gidiyorum Muhtemelen görebilirsiniz

function getHtml() { 
    JsonRequest('/json/villages/1/people', function(response) { 
     var html = '<div id="test">'; 
     for (int i = 0; i < response.length; i++) 
     { 
      var person = response[i]; 
      html += '<div class="person">'; 
      html += person.name; 
      if(canEdit) html += '*'; 
      html += '</div>'; 
     } 
     return html + '</div>'; 
    }); 
} 

kodu. Bunu yapmanın en etkili yolu ne olurdu? Birkaç farklı alternatif düşünmekteydim -

1. Her ModuleToHtmlMethod bu veri nesnesini HTML'ye dönüştürme yöntemini tanımlayan bir sınıf olabilir. Bunu denedim ama durdum çünkü çok karmaşıklaşıyordum.

2. C# olarak yorumlanabilen, ancak JavaScript koduna 'derlenmiş' olan kendi kodlama dilimi yazın.

3. Sadece C# çok yazmak ve sadece C#

4. HTML içeriği istemesini ayrılan kodu tutun Ajax kullanmak ve iki kez her yöntemi yazın.

Sonunda diğer geliştiricilerin bu 'modülleri' yazmasına izin vermek isterim, bu nedenle en iyi seçenek olabilir mi?

cevap

1

Bakım 4'ü daha zor hale getireceğinden ve Javascript ile C# kodundan oluşturulan HTML arasında eşzamanlama dışında kalmanıza neden olabileceğinden seçenek 4'ü iptal ediyorum. Ayrıca 2. seçeneği, kodu diğer geliştiriciler için daha da zorlaştıracak ve muhtemelen gereksiz hale getirebileceğinden de reddederim.

Kesinlikle HTML'yi tek bir yerde üretebilir ve muhtemelen HTML parçalarını döndürmek için C# var olan işlevi kullanan RESTful HTML API'sini açığa çıkarırdım. Yani sizin Javascript'inizden şu çağrıyı yapabilirsiniz:

+0

ben bu muhtemelen gitmek için en iyi yol olduğunu düşünüyorum. Buradaki problem, kodun büyük çoğunluğunun döngü halinde olmasıdır (ki bu oldukça büyük olabilir), bu yüzden html'nin büyük bir çoğunluğu tekrarlanacaktır, bu da yanıt büyüklüğünü önemli ölçüde artıracaktır. Kompresyon gzip burada bana yardım eder mi? – Connell

+0

gzip kullanarak yanıt boyutunun% 50-70'ini traş etmelisiniz, bu kabul edilebilir olup olmadığını görmek için çağrıdır. JSON RESTful API'sini ve HTML RESTful API'sini kullanarak aynı yanıt arasındaki Bayt'taki farkı hesaplamanız gerekir. Fark% 50'den azsa, gzip kesinlikle işaretleme yükünü çözecektir. –

+0

Size,% 50'den fazla ekstra olması gerekeceğini söylemek için test etmem gerekiyor. Genellikle 10-20 kez döngü yapabilen, ancak çağrılan veri türüne bağlı olarak 50 tek sayıya kadar uzayabilen ilmekler vardır. Daha sonra html kodu, ''

'+row.name+' Edit
'veya benzeri ile benzerdir. Genellikle daha fazla HTML, belki bir sil düğmesi. – Connell

1

Birkaç öneri.

  • html'yi yansıtan genel GetHtml yöntemine sahip olun. UI, veri alanlarına kolay ve tekdüze bir şekilde eşleşmeyen bir şey olmadığı için bu zor olabilir.
  • sizin jenerik GetHtml yöntemlerini oluşturmak için kullanabilir, sizin 'modüllerin' bir meta açıklaması var
  • Nihayet try this: Bu, sadece JavaScript yöntemlerini oluşturmak sağlayacak daha sonra C#

onları çağırabilir Veri katmanlarım için yaptığım gibi ikinci, meta açıklama seçeneği için giderdim. Temelde, alan modelimi tanımlayan bir dosyam var. Ben tüm veri acccess pocos, nhibernate config dosyaları, vb. Oluşturmak için kullanıyorum. Daha sonra UI oluşturma bilgileri ve alan doğrulama bilgileri gibi bu nesnelere bilgi ekleyen bir meta veri dosyasına sahibim.

Tnx

Guido

+0

İkinci seçeneğinizde, bir kişinin aynı işlevi birçok dilde yazmasına veya 2. seçeneğime benzer bir şekilde kullanılabilecek bir makine tarafından okunabilir açıklamaya izin veren, okunabilir bir açıklama mı kastediyorsunuz? – Connell

+0

Bir kod üreticisi demek istiyorum. Yani bir 'açıklama dosyası' tanımlar ve daha sonra tüm getHtml yöntemlerinizi üretirsiniz. Yani temel olarak ortaya çıkan şey bir DSL'deki tüm modüllerinizi açıklamanızdır (xml veya json iyidir, [T4] 'e bakmak isteyebilirsiniz (http://msdn.microsoft.com/en-us/library/bb126445). aspx)). Yani evet, senin seçenek 2 gibi, ama kendi betik dilini yazmaktan çok daha basit. – gatapia

+0

Hmm .. Bunun javascript ile nasıl çalıştığını görebiliyorum. C# kodu oluşturulduktan sonra, kodu sadece C# koduna kopyalayabilir miyim? Ya da bu tanımı yorumlamak ya da derlemek için biraz süslü bir yolum olacak mı? – Connell

İlgili konular