سؤال

يتعلق هذا بتطبيق مؤسسي يحتوي على قاعدة بيانات عامة جدًا (يتم تحديد جميع الكائنات باستخدام البيانات الموجودة في قاعدة البيانات ويتم تدويلها/تعميمها/مترجمتها).

  • إنشاء نموذج لنمط المستودع، ثم إنشاء (إنشاء 1:1) نموذج آخر للوصول إلى قاعدة البيانات (LINQ2SQL أو EF) واستخدام الأحدث كطبقة وصول إلى بيانات نموذج المستودع؟
  • ما عليك سوى استخدام نموذج L2S/EF/NHibernate مباشرةً، وتعيين النموذج إلى قاعدة البيانات وفتح طبقة الثبات؟

هل ستؤدي المشاكل المنبثقة لفكرة النموذج المزدوج (نمط المستودع) إلى جعل استعلامات بحث LINQ الديناميكية القابلة للتكديس ممكنة عند استخدام نموذج L2S/EF مباشرة في بيئة نموذج مزدوج؟

يرجى تقديم النصيحة.

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

المحلول

طالما أنك تعرض كائنات IQueryable في مستودعك، فلن تواجه مشكلة في تكديس الاستعلامات بالطريقة التي تقترحها.

سأكون حذرًا بشأن استخدام Entity Framework لهذا الغرض، نظرًا لأن التحميل البطيء غير مدعوم بالطريقة التي قد تتوقعها.سيتعامل Linq to SQL مع التحميل البطيء دون مشاكل.

لمزيد من المعلومات حول التحميل البطيء في Entity Framework، راجع:
http://www.singingeels.com/Articles/Entity_Framework_and_Lazy_Loading.aspx

نصائح أخرى

نلقي نظرة على الهندسة المعمارية الحادة.

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

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