سؤال

ولقد طلبت استخدام المفرد نمط تنفيذها DAL، ولكن أعتقد أنه من الصعب تجميع الاتصالات، استخدم transactions..etc

وأود أن تعرف إيجابيات وسلبيات وأيضا أود أن أعرف أفضل طريقة لتجميع الاتصالات كما يمكن أن يكون هناك أكثر من 500 مستخدم في الوقت ذاته لموقع أنا النامية.

وDB Server غير أوراكل 10g.

وDAL يستخدم مكتبة المؤسسة 3.1

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

المحلول

ونمط المفرد تعتبر كبيرة بالنسبة لDAL - I استخدام هذا في تطبيق المشاريع الخاصة الويب الخاص بي (مئات مستخدم وأكثر من 2000 أساليب في 20 بعض الطبقات المفردة). تتم معالجة تجمع الاتصالات في الواقع أفضل من ado.net ومزود خدمة نفسها. إذا كنت ترغب في وجود أنواع متعددة من خادم خلفية، وهذا ليس مشكلة. حتى مع وجود نمط المفرد، وربما كنت ترغب في فئة الوصول إلى البيانات المركزية الذي يعالج خصوصيات الواقع جعل المكالمات مباشرة إلى قاعدة البيانات (مع المعلمات، أسماء النص / الإجراء، أوراق اعتماد / سلسلة الاتصال عن مرت في).

في وضعي، كل طريقة على يتوافق واحدة 1: 1 مع إجراء مخزن في قاعدة البيانات. وهذا يجعل أساسا C # "الأمامية" هوك لكل إجراء مخزن، بحيث يمكن استدعاء تقريبا مثل الأصلي C # رمز، متحدثا نحويا. يجعل المكالمات إلى DAL واضحة جدا. لدي سنغلتونس متعددة نظرا لوجود عدد هائل من المنتجات الخاصة في المسألة. كل SP لديه البادئة، مثل Development_، أو Financial_، أو Organization_ أو أيا كان. ثم لدي الطبقة المفرد الذي يتوافق مع كل، مثل التنمية، المالية، أو منظمة. وبالتالي فإن Organization_ViewData س في C # تكون وسيلة اسمه ViewData على فئة المفردة اسمه المنظمة.

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

نصائح أخرى

وأفضل الممارسات لتجمع الاتصال هي عدم تنفيذ ذلك بنفسك، ولكن بدلا من السماح للإطار ADO.NET العناية بها.

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

وهذا هو موضح هنا:      http://msdn.microsoft.com/en-us/ مكتبة / ms254502.aspx

وحول استخدام سنغلتونس بشكل عام: لقد استخدمها لالتفاف طبقة الوصول إلى البيانات، وعملت دائما بشكل جيد

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

وأنا لا أعرف عن DAL لكن النمط المفرد هو وسيلة رائعة لجعل البيانات العالمية مع الحفاظ على التغليف الجيد.

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

وأنا غير مستقر قليلا حول استخدام سنغلتونس في حالة وجود DAL. ماذا لو أريد استخدام الخلفية قاعدة بيانات أكثر من واحد. ربما كنت ترغب في استخدام MSSQL الفواتير ولكن Active Directory من أجل المصادقة. أو ربما كنت ترغب في استخدام الخلية عن المشاركات المخالفة، ولكن كيو لتجميع الجغرافية (أكثر واقعية بالنسبة لي، هيه). المفرد واجهات قد جعل اختبار طبقات قاعدة بيانات أكثر صعوبة بكثير عندما لا أستطيع تمرير اتصال قاعدة بيانات وهمية على المحك.

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

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

إذا كنت ترغب في عدم استخدام المفرد، تأكد من أن حالات DAL الخاصة بك lightweigth لأن هذا قد يحدث فرقا، ولكن عادة لا يكون.

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

وبعد أن كل نظام تم إنشاؤها باستخدام هذه القاعدة السحرية، يمكنك أن تلعب مع المعلمات سلسلة الاتصال لتغيير بعض الخيارات تجمع (الحجم الأولي، الحد الأقصى للحجم، ...)

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