تحميل نماذج العرض التقديمي مباشرة من قاعدة البيانات

StackOverflow https://stackoverflow.com/questions/3696423

سؤال

أنا أعمل على تطبيق ثنائي المستوى حيث يقوم عميل WinForms بإجراء مكالمات مباشرة إلى قاعدة البيانات. في أحد السيناريوهات ، أحتاج إلى عرض قائمة من كيانات العملاء للمستخدم. المشكلة هي أن كيان العميل يحتوي على الكثير من الخصائص (بعضها ثقيل جدًا) وأحتاج فقط إلى اثنين منهم - الأسماء الأولى والأخيرة. لذا ، لتحسين الأداء وجعل منطق العرض أكثر وضوحًا ، أريد إنشاء نوع من فئة CornerMarmaryViewModel مع خصائص مطلوبة فقط واستخدم ميزة توقعات Nhibernate لتحميلها. قلقي هنا هو أنه في هذه الحالة ، يصبح منطق الوصول إلى البيانات مقترنًا بالعرض التقديمي ويبدو أنه من الخطأ من الناحية المفاهيمية.

هل تعتقد أن هذا على ما يرام أو هناك حلول أفضل؟

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

المحلول

أعتقد أنه يمكنك النظر في CorperningUmmaryViewModel كتقرير (CustomerUmmaryReport). من الجيد الاستعلام عن كياناتك عن السيناريو مثل هذا ومعاملتها كتقارير. معظم التقارير أكثر تعقيدًا ، باستخدام كيانات متعددة واستعلامات إجمالية. هذا التقرير بسيط للغاية ، لكن لا يزال بإمكانك استخدامه مثل التقرير.

أنت تذكر أيضًا أن الأداء مهم. هذا سبب آخر لاستخدام استعلام تقارير منفصل و DTO. يبدو كيان العميل كواحد من الكيانات "الرئيسية" التي تستخدمها. أن الأمر يستغرق وقتًا كبيرًا لاستردادهم من قاعدة البيانات ذات الخصائص المحملة بالكسل غير المهيمنة ، يمكن أن يكون تحذيرًا لتحسين كيان العميل نفسه ، بدلاً من ذلك باستخدام استعلامات الإبلاغ لاسترداد المعلومات عنها. مجرد تحذير لأنني رأيت حالات كانت هناك حاجة إليها.

بالمناسبة ، يمكنك التفكير في LINQ بدلاً من التوقعات لأسهل بناء الجملة مثل:

var reports = session.Linq<Customer>()
  .Where(condition)
  .Select(customer => new Report 
   { 
       FirstName = customer.FirstName, 
       LastName = customer.LastName 
   })
  .ToList();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top