سؤال

يا قوم،

لديّ مشروع ASP.NET وهو N-tier جميلًا ، بواسطة مساحة الاسم ، لكنني بحاجة إلى الانفصال إلى ثلاثة مشاريع: طبقة البيانات ، الطبقة الوسطى والواجهة الأمامية.

أنا أفعل هذا لأن ...

أ) يبدو الشيء الصحيح الذي يجب القيام به ، و

ب) أواجه كل أنواع المشكلات في تشغيل اختبارات الوحدة لتجميعات ASP.NET المستضافة.

على أي حال ، سؤالي هو ، أين تحتفظ بمعلومات التكوين الخاصة بك؟

في الوقت الحالي ، على سبيل المثال ، تقوم فئات الطبقة الوسطى الخاصة بي (التي تستخدم LINQ إلى SQL) تلقائيًا بسحب معلومات سلسلة الاتصال الخاصة بهم من web.config عند إنشاء سياق بيانات جديد.

إذا كانت طبقة البيانات الخاصة بي في مشروع آخر يمكن/هل يجب أن تستخدم web.config لمعلومات التكوين؟

إذا كان الأمر كذلك ، كيف سيوفر اختبار الوحدة ، (عادةً في مجموعة منفصلة) معلومات تكوين Soch؟

شكرا لوقتك!

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

المحلول

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

لدينا نسخة من الملف لكل بيئة تشغيل (Prod ، Dev ، التدريج ، إلخ). بعد ذلك ، مع إعدادين - مسار الملف (مع رمز تمثل البيئة) والبيئة - يمكنني التقاط ملفات الإعدادات الصحيحة.

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

ثم عند بدء تشغيل التطبيق ، نكتب سلسلة الاتصال الصحيحة إلى ملف web.config (إذا كان مختلفًا). مع هذا ، يمكننا تغيير موقع ويب من Dev إلى Prod عن طريق تغيير قيمة Appsettings.

نصائح أخرى

طالما لم يكن هناك الكثير ، فمن المريح أن يكون في الويب. بالطبع ، يجب ألا يكون لديك أي أدنى فكرة عن أنه يأتي من هناك.

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

CAPPData.ConnectionStrings(DatabaseName.Foo) = 
    ConfigurationManager.ConnectionStrings("FooConnStr").ConnectionString()
CAPPData.ConnectionStrings(DatabaseName.Bar) = 
    ConfigurationManager.ConnectionStrings("BarConnStr").ConnectionString()
etc.

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

لأغراض الاختبار ، لا تقوم بتثبيت DataContext مع CTOR الافتراضي. تمرير معلومات سلسلة الاتصال إلى مُنشئ.

أفضل استخدام أطر IOC لحقن الاتصال في سياق البيانات ثم حقن السياق إلى فئات أخرى.

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