سؤال

أنا ألعب باستخدام ASP.NET MVC وأرى أن هناك عددًا قليلاً من محركات العرض البديلة المتاحة له مثل NHaml وSpark.سؤالي هو لماذا هل ستستخدم محرك عرض بديل؟لا أرى فائدة من وجود شيء مثل هذا:

<ul if="products.Any()">
    <li each="var p in products">${p.Name}</li>
</ul>
<else>
    <p>No products available</p>
</else>

باستخدام محرك عرض Spark (مضاعف منذ ذلك الحين، ولم أستخدم Spark للتحقق من ذلك وقد يكون الأمر مخطئًا تمامًا، فلن تحصل على Intellisense لأنك تقوم بتمرير الكود كسلسلة) و:

<% if products.Any() { %>
    <ul>
      <% foreach (var p in products) { %>
        <li><%= p.Name %></li>
      <% } %>  
    </ul>
<% } else { %>
    <p>No products available</p>
<% } %>

باستخدام تنسيق قالب ASP.NET MVC المدمج (على الرغم من أنني أعترف بأن القوس المتعرج المتدلي قبيح جدًا).هل هناك أي سبب مشروع بخلاف علامات "التمساح" (أو الأقواس المتعرجة المتدلية) للنظر في استخدام محرك عرض بديل؟أم أنه رائع لأنه شيء جديد؟

هل كانت مفيدة؟

المحلول

حاول أن تجعل الأمر أكثر تعقيدًا بعض الشيء:

<div if="orders.Any()" each="var order in orders">
  Here's your order #${orderIndex+1}:
  <ul>
    <li each="var p in order.Products">
       ${pIndex}: ${p.Name}
       <span if="pIsLast"> (the end)</span>
    </li>
  </ul>
</div>

أستطيع أن أرى التدفق هنا.أستطيع أن أرى في الواقع لغة البرمجة هنا.الآن نلقي نظرة:

<% if (orders.Any()) { %>
  <% var orderIndex = 0; foreach (var order in orders") { %>
   <div>
    Here's your order #<%= (orderIndex+1) %>
    <ul>
      <% int pIndex = 0; foreach (var p in order.Products) 
         { bool pIsLast = pIndex == products.Count; %>
        <li>
           <%= pIndex %>: <%= p.Name %>
           <% if (pIsLast) { %>
              <span> (the end)</span>
           <% } %>
        </li>
      <% ++ pIndex; } %>  
    </ul>
   </div>
  <% orderIndex++; } %>
<% } %>

أنا ضائعة هنا.هل هناك أي HTML هناك؟

بالنسبة لي، هذا هو السبب الرئيسي.بالطبع، يوفر Spark الكثير من الميزات - وحدات الماكرو (حيث تقوم بترميز Html.Helpers الخاص بك في علامة شرارة)، وتصدير PDF، وما إلى ذلك - المدرجة من قبل الآخرين - ولكن كمبرمج أفضل الكود النظيف.

كمثال آخر، هل تستخدم غالبًا for (int i = 0;أنا < المنتجات. الكونت؛i++) { منتج المنتج = المنتجات[i];....} هذه الأيام؟هل تفضل foreach (var المنتج في المنتجات) {}؟أود.ليس فقط لأنه أقل في الكتابة.لأن:

  • فهو يعبر عن النية بشكل أفضل
  • يقرأ بشكل أفضل
  • فهو يخفي تفاصيل إضافية (مثل .Count أو .Length أو .Count())؛أو إذا كان الأمر لا يحصى والذي يتعين عليك اجتيازه بطريقة خاصة) من ذهني المتعب
  • إنه يقلل من عدد المتغيرات التي تشوش السياق (وعقلي المتعب)
  • وبالتالي يمكنني التركيز على المشكلة، فلا شيء يعيق طريقي
  • إنه يساعد على تجنب {} نظرًا لعدم الحاجة إلى وجود متغير بداخله - مما يقلل عدد الأسطر
  • وعندما تقوم بتغيير المجموعة من IList إلى المصفوفة، فإنك لا تغير 50 ​​حلقة في كل مكان

وهذا يتعلق بشيء بسيط مثل foreach.كل سبب بسيط، لكنه يلخص شيئًا أكبر.وهذه الأسباب تنطبق تمامًا على سبارك.مهلا، يبدو أنني في حالة حب ;-)

تحديث:الآن، هل تعرف ماذا؟انظر إلى سجل تحرير مشاركاتي.اضطررت إلى تعديل كود ASP اللعين عدة مرات فقط لأنني فاتني بعض الأجزاء هنا وهناك.أنا فقط لا أرى إذا كان صحيحا أو خطأ.انها تماما مختفي إذا كان لدي فترة هناك، أو حالة في المكان.

تحديث:امم، تعديل آخر...نقل if/span الخاص بـ ASP داخل li ...

نصائح أخرى

أعتقد أن السؤال الذي تحتاجه لطرحه هو "لماذا تريد تغيير محركات العرض" بدلا من "هل يجب علي تغيير محركات العرض"

اخترت شرارة لأنني أردت إطلالات أنظمة نظافة وأردت أيضا استخدامها لإنشاء قوالب لأشياء أخرى غير HTML. أستخدمها حاليا لتوليد قوالب XML و JSON وقوالب البريد الإلكتروني حتى تصبح محركا قوالب بالنسبة لي بالإضافة إلى محرك عرض. يتيح ذلك لأنه يتيح لك تقديم طرق عرض على الأوتار بدلا من ذلك، والتي ليست (بسهولة) متوفرة في محرك العرض القياسي.

من المهم أيضا ملاحظة أنك لست مضطرا لاستخدام محرك عرض واحد أيضا. يمكنك استخدام محركات متعددة في نفس الوقت حتى تستخدم محرك العرض الافتراضي لقوالب HTML، ولكن قم بالتبديل إلى Spark for XML.

بشكل عام، إذا كان مشغل الرؤية الافتراضي يقوم بكل ما تحتاجه، فأنت سعيد به، فلن أزعج التبديل على الإطلاق، ولكن إذا كان لديك احتياجات محددة لا يتم استيفاءها بواسطة محرك العرض الافتراضي، فربما حان الوقت للنظر في البدائل.

شخصيا، لا أستخدم محركات مشاهدة بديلة، لكن نداءها هو آراء نظافة. إذا كنت يجيد شرارة، فإن هذا المثال الأول هو أجمل كثيرا وأسهل القراءة.

ومع ذلك، أفضل التفاف المنطق مثل ما قدمته في طريقة مساعد. ليس من الضروري أن أتعلم شيئا جديدا، ويمكن أن يفهمها كل زملائني كل زملائي، وأظل وجهات نظري نظيفة نسبيا. إنها مسألة ذاتية تماما، وإما النهج على ما يرام.

هذه محركات الرؤية هذه هي إلى حد كبير مرتفعة من أطر أخرى مثل ROR و DJANGO. حجة Django لنظام قالب رأيها هي أن المشاهدات يجب أن فقط كن لعرض المنطق. لذلك، إذا قمت بتقييد ما هو ممكن في محرك العرض الخاص بك، فسيكون لديك فرص أقل لتخلط المسؤوليات بين وحدات التحكم والآراء.

أود أن أقول إنه خيار أكثر من أي شيء آخر. يبدو الأمر مثل القرار بين C # و Visual Basic، واستخدم ما تعرفه بشكل أفضل وما ستكون أكثر إنتاجية.

بعض فوائد شرارة (ما أحب):

  1. يمكنك استخدام طرق عرض جزئية مثل علامات HTML. مثال على الاستخدام يمكن أن تكون علامة زوايا مدورة.
  2. أنت لا تحصل على "حساء العلامة". ربما لا ترى فائدة الآن، ولكن إذا كان لديك وجهات نظر ضخمة، فمن غير قابل للقراءة.
  3. تحصل على الوصول المكتوبة بشدة إلى ViewData ["..."].
  4. يمكنك بسهولة تقديم طرق العرض إلى السلسلة.
  5. تطبق تلقائيا HTML.Encode، زيادة سلامة التطبيق الخاص بك.

ما لا أحب:

  1. لديه مشاكل مع intellisense وإعادة التجسس.
  2. لا يمكن استخدام خيار المستند تنسيق.

لقد حلت هذه القضايا هذه، لن أرى أي سبب لاستخدام محرك العرض القياسي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top