سؤال

لدي jQuery جدول البيانات تم تكوينه لمعالجة جانب الخادم مقابل خادم ASP.NET MVC.

لتحقيق التحسين التدريجي ، يتم تقديم جدول HTML ، ثم ترقية إلى DataTable. عندما تقوم DataTable بإجراء مكالمة Ajax لاسترداد المزيد من البيانات ، فإنها تتوقع أن ترتبط عناصر JSON التي تم إرجاعها مع تخطيط عمود الجدول الحالي.

هذه يبدو للتسبب في بعض الاحتكاك المعماري ، لأن:

أثناء عرض الصفحة الأولية:

  • تقوم وحدة التحكم بتحويل بيانات قاعدة البيانات إلى DTOs وتنشئ نموذج ViewData.
  • تقوم PiewPage بتحويل نموذج ViewData إلى HTML بمساعدة htmlhelper ، إلخ.

تحديثات Duriung Ajax:

  • تقوم وحدة التحكم بتحويل بيانات قاعدة البيانات إلى بيانات خلايا الجدول ، مع الارتباطات التشعبية ، إلخ.
  • يقوم Datatable بإعداد البيانات التي تم إرجاعها مباشرة إلى خلايا الجدول.

النقطة المهمة هنا هي أن وحدة التحكم تُجبر الآن على معرفة تخطيط عرض الطاولة ، عندما تكون مسؤولية ينبغي تقتصر على مرور DTOs مرة أخرى.

ما هو صيح نمط هنا؟ كيف يمكنني دعم مكالمات Ajax والالتزام بمدير المسؤولية الواحدة في وحدة التحكم؟


بعض الوضوح:

DTO الخاص بي لديه ثلاث عقارات:

public class AccountListing
{
    public int Id { get; set; }
    public string AccountCode { get; set; }
    public string AccountName { get; set; }
}

يحتوي Datatable المقدم على أربعة أعمدة:

+--------------+--------------+------+------+
| Account Code | Account Name | View | Edit |
+--------------+--------------+------+------+
| 12345        | FooBar Inc.  | Link | Link |
+--------------+--------------+------+------+

تقوم PiewPage بإعداد 3 خاصية DTO إلى جدول عمود 4. إذا قامت وحدة التحكم بتمرير نفس خاصية 3 Property DTO مثل Ajax JSON ، فإن جدول البيانات يشكو من الأعمدة المفقودة ... يتوقع جدول البيانات أن يمثل JSON العائد عناصر الخلايا ، بدلاً من بيانات المصدر.

حاليًا أقوم بحل هذا باستخدام تحويلات صفيف jQuery وتقديم الجدول المخصص ، مما يكرر فعليًا منطق صفحة العرض.

هل هناك أي بديل؟

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

المحلول

إن حلك الحالي (القيام بالعرض على جانب العميل) يبدو جيدًا بالنسبة لي.

الشيء هو أن DTOs لا يجب أن تتوافق مع ما يعرضه صفحات العرض الخاصة بك. النمط الشهير هو وجود كائنات ViewModel لهذه الحالات.

علي سبيل المثال :

public class AccountListingViewModel {
    public string AccountCode { get; set; }
    public string AccountName { get; set; }
    public string ViewLink { get; set; }
    public string EditLink { get; set; }
    public static AccountListingViewModel FromAccountListing(AccountListing o) {
        AccountListingViewModel returnObj = new AccountListingViewModel();
        //populate the properties from the parameter
        return returnObj;
    }
}

يرى ViewModel, Model-View-ViewModel.

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