سؤال

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

(from c in dataContext.Customers
where c.Active == true 
select new DTO.Customer
{
   CustomerID = c.CustomerID,
   Name = c.CustomerName,
   ...
}).ToList()

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

سؤالي هو، هل هذه ممارسة جيدة؟ هل هناك طريقة لإنشاء DTO (ربما عبر SQLMetal)، وما هي المشكلات الأخرى التي قد أواجهها مع تقدم المشروع.

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

المحلول

لا أعرف ما إذا كانت هذه أفضل الممارسات ولكني كتبت تعليمات برمجية مماثلة في الماضي غير القريب لأنني شعرت أيضًا أنه يمكنني تحسين الفصل بين الاهتمامات باستخدام الفصول الدراسية الخاصة بي بدلاً من الفئات التي أنشأها مصمم LINQ داخل تطبيقي .

قد ترغب في التفكير في إرجاع IQueryable<Customer> بدلاً من IList<Customer> من طريقة الوصول إلى البيانات الخاصة بك.نظرًا لأن IQueryable<T> يرث من IEnumerable<T>، فيجب أن يكون باقي تطبيقك قادرًا على التعامل معه بشكل جيد.يمكنك أيضًا تحويلها إلى قائمة عندما تحتاج إلى ذلك حقًا.

وتتمثل ميزة ذلك في أنه يمكنك تعديل الاستعلام الخاص بك ديناميكيًا بسهولة تامة وتقليل كمية البيانات التي يتم إرجاعها من SQL Server.

على سبيل المثالإذا كان توقيع طريقتك هو iqueryableu003CCustomer> getCustomers () يمكنك الحصول على عميل واحد عن طريق الاتصال getCustomers (). حيث (c => c.customerid == 101) .Single () ؛

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

نصائح أخرى

في رأيي، في معظم الحالات، لا تكون هناك حاجة إلى كائنات DTO عند التعامل مع LINQ.يمكن اختبار فئات LINQ التي تم إنشاؤها بسهولة.يمنحك LINQ القدرة على الاستعلام عن بياناتك من مصادر مختلفة باستخدام استعلامات متطابقة.يمنحك القدرة على اختبار استعلاماتك مقابل قوائم الكائنات بدلاً من قاعدة البيانات الحقيقية.

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