سؤال

هل يحل LINQ محل نموذج العرض التقديمي؟

قرأت في كتاب "ASP.NET MVC in Action" حول نماذج العرض التقديمي.

أتساءل لماذا بناء نموذج عرض تقديمي؟!

على سبيل المثال ، يعد إسقاط كائن المجال (الكيان) عن طريق إنشاء فئة جديدة في وقت التشغيل عبر LINQ أكثر راحة من إنشاء عشرات كائنات العرض التقديمي.

فما رأيك؟ ربما شخص ما منكم يستخدم كلاهما: يا

التقنيات التي أود أن تكون prefere هي ASP.NET MVC و NHIBERNATE مع LINQ أو إطار الكيان.

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

المحلول

LINQ لا يحل محل نموذج العرض. كما أنه لا LINQ إلى SQL ، إذا كان هذا هو ما تشير إليه (وهو على الأرجح). بدلاً من ذلك ، فإن جداول قاعدة بيانات خرائط LINQ إلى SQL إلى فئات C# أو VB ، بحيث يمكنك العمل مع البيانات مباشرة في التعليمات البرمجية الخاصة بك.

نموذج العرض التقديمي (أو نموذج العرض في ASP.NET MVC) هو فئة رمز تستخدم لفصل عرضك من نموذج البيانات أو فئات الأعمال. يتيح لك نموذج العرض وضع أشياء مثل التحقق من الصحة وعرض المنطق فيه ، دون أن يلف عرضك.

تذكر أن التصميم الذي يحركه المجال (DDD) في جوهره هو في الحقيقة مجرد طريقة لإنشاء مفردات شائعة ("اللغة في كل مكان") بينك وبين عميلك بحيث تكون عملية التصميم أسهل وأكثر دقة.

تأكد من مراجعة البرنامج التعليمي Nerddinner على nerddinnerbook.s3.amazonaws.com/intro.htm. وتناقش النماذج عرض بالتفصيل في nerddinnerbook.s3.amazonaws.com/part6.htm

نصائح أخرى

Rookian ، أعني أن السماح للمستودعات بفضح الخصائص التي يمكن أن تكون بمثابة نموذج عرض تقديمي.

في مثالك "CustomerRepository.GetAll().Select(x=>new {firstname = x.Firstname, lastname = x.Lastname}.ToList()"، أنت تجلب جميع الخصائص من قاعدة البيانات ، وتحولها باستخدام LINQ إلى الكائنات ، وهي مشكلة إذا كان الأداء مصدر قلق.

لم أقم بتطبيق أي شيء من هذا القبيل بنفسي ، لكنني أستخدم حاليًا LINQ إلى nhibernate في مستودعات بلدي.

أعتقد أن واجهة برمجة التطبيقات (API) يمكن أن تبدو مثل:

IRepository<TEntity>
{
   List<object> FindAll(params Func<TEntity, object>[] properties);
}

حيث يستخدم العميل واجهة برمجة التطبيقات مثل SO:

var presentation = repository.FindAll(x => x.Firstname, x => x.Lastname);

... ويستخدم التنفيذ قاعدة البيانات لجلب الخصائص المطلوبة فقط.

مبدأ المسؤولية الفردية.

مع نموذج العرض التقديمي - تقوم بفصل النموذج الخاص بك من طبقة العرض التقديمي. لم يعد نموذج النطاق الخاص بك مسؤولاً بعد الآن عن ترجمة كل شيء إلى سلسلة ، وتكوين أخصائيات البيانات ، إلخ ..

بمعنى آخر - هناك مشكلة مع الكيانات الملزمة من نموذج المنشور مع LINQ2ENTITIONS التي تم إنشاؤها. طبقة العرض يحل هذا بسهولة.

عندما أستخدم نمط المستودع بنمط المواصفات ، لماذا يجب أن أستخدم نموذج العرض التقديمي؟

ما هي الفوائد الملموسة لهذا النموذج؟

مع LINQ ، يمكنني إنشاء كائنات جديدة تتناسب مع العرض. على سبيل المثال ، لدي كائن عميل يحتوي على معرف ، اسم FirstName ، LastName والعنوان.

في العرض ، أحتاج فقط إلى الاسم الأول والأخير. لذلك أود أن أنشئ مستودعًا يحتوي على طريقة مع نوع إرجاع من iquerable (أو نحو ذلك) وفي وحدة التحكم ، سأستخدم شيئًا كهذا: customerrepository.getAll (). حدد (x => جديد {firstName = x.firstName ، lastName = x.lastname} .ToList (). وبنمط المواصفات ، يمكنني أيضًا إضافة بعض المنطق لهذه المكالمة أي باستخدام تحديد (أين).

... لذلك ولماذا طبقة العرض التقديمي: ق؟

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