سؤال

ولقد تم النظر إلى واجهة MVC ونرى أن يتم إرجاع IQueryable من الطبقات المخزون. أتساءل إذا كنت لا تستخدم LINQ فإنه من المنطقي أن يعود هذا الكائن؟ في حالة LINQ في المنطقي بسبب تأجيل تنفيذ، لذلك مضيفا تصفية في خدمة طبقة المنطقي، ولكن إذا كنت لا تستخدم LINQ كنت تريد تصفية في DB في كثير من الحالات. في هذه الحالة وأود أن أضيف فقط أن تفعل طرق الترشيح إلى المخزون؟ إذا كنت تفعل، هي طبقة خدمة مفيدة حقا؟

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

المحلول

وسيطات يمكن إجراء اي من الاتجاهين، انظر هذا الأخير بلوق نشر: <لأ href = "http://mikehadlow.blogspot.com/2009/01/should-my-repository-expose-iqueryable.html" يختلط = " نوفولو noreferrer "> وإذا بي مستودع تعرض IQueryable؟

نصائح أخرى

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

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

وقضية لدي مع تعريض IQueryable إلى طبقة الخدمة هي أنه إذا كنت تريد من أي وقت مضى إلى التفاف طبقة مستودع وراء خدمة ويب دون كسر رمز طبقة الخدمة لا يمكن، أيضا لا يخلو باستخدام <لأ href = "HTTP : //msdn.microsoft.com/en-us/data/bb931106.aspx "يختلط =" نوفولو noreferrer "> خدمات البيانات ADO.NET ولكن بعد كل ما تبذلونه من كود مستودع ستصبح أساسا لزوم لها.

وبينما أنا أعتقد أنه يمكن أن تكون مثمرة جدا للتطبيقات الصغيرة، وعندما تبدأ في النظر في التوسع والتوزيع فإنه أكثر سيئة مما تنفع.

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