سؤال

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

أي اقتراحات لأساليب أفضل للتعامل مع هذا أو مصادر المعلومات الجيدة للبحث؟

كيف نفعل الأشياء في الوقت الحاضر:

  • العديد من ملفات تكوين XML التي يتم الرجوع إليها في web.config ، على سبيل المثال appsettings.xml.
  • يتم الاحتفاظ بالتكوينات لمواقع محددة في ملفات التكوين المكررة.
  • الملفات النصية التي تحتوي على قوائم البيانات الخاصة بالموقع
  • في بعض الحالات ، تغييرات لمرة واحدة يدويًا على قاعدة البيانات
  • C# التكوين لـ Windsor IOC.

القضايا المحددة التي نواجهها:

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

أفكارنا الحالية حول كيفية التعامل مع هذا:

  • انقل التكوين إلى رمز تم تجميعه ديناميكيًا (ربما Boo أو Binsor أو JavaScript)
  • احصل على شكل من أشكال التكوين/الاندماج: الجمع بين التكوين الافتراضي مع تكوين مباشر/اختبار/تدريب وتكوين خاص بالموقع
هل كانت مفيدة؟

المحلول

بغض النظر عن الطريقة التي تذهب بها ، أعتقد أنه قد يكون من المهم أن يكون لديك فكرة "مصدر الحقيقة" الواحد لتكوينك.

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

ولكن للحفاظ على عقلتك ، أعتقد أنه يجب أن تحاول أن تهدف إلى الحصول على مكان واحد حيث تقوم بتعيين جميع التكوين المتعلق بتطبيقك ، ثم آلية محددة جيدًا لترجمة ذلك إلى إدخالات داخل الويب. يجب أن تدعم.

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

ثم لإدارة التكوين لمواقع/عملاء مختلفة ، يكون لديك نظريًا حول ملف تكوين واحد لإدارته.

ملحوظة: في ASP.NET 4.0 ، ستتوفر آلية تحويل تكوين وقت البناء (انظر http://blog.hmobius.com/post/2010/02/17/aspnet-40-bart-4-config-transformation.aspx) ، مما قد يجعل هذه المهمة أسهل. يبدو أنه يمكنك استخدام هذا مع بعض الاختراقات لمشاريع غير ويب (انظر http://philbolduc.blogspot.com/2010/03/using-config-transforms-ouside-web.html).

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

نصائح أخرى

إذا كان الرمز الذي يستخدم عناصر التكوين المذكورة هو رمز يمكنك إدارته/يمكن تغييره (وكل تشغيله في مساحة الكود المدارة/C#) ، فسوف أتطلع إلى نقل مكالمات الطريقة التي تحصل على إعدادات إلى مكالمة في فئة شبيهة بالفرد مع الحصول () طريقة على ذلك.

يمكن أن يكون getObject () مفيدًا جدًا (تحقق من الأشياء التسلسلية .NET XML - يتهجئها الأمريكيون بـ "Z": Serialization) ... مفيد لكثير من الأشياء إدخالات واحدة في المتجر.

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

فيما يتعلق بقيم التخزين المؤقت للمفاتيح - أستخدم ذاكرة التخزين المؤقت للذاكرة الخاصة بي (للتطبيقات الأصغر) لأن النفقات العامة الموجودة على المكدس قابلة للإدارة ... قد تعمل أشياء مثل Memcache هنا (يتم الوصول إلى متجر التكوين عبر TCP/على الشبكة في مكان ما) ...

تحرير شيء مثل:

public class ConfigurationStore
{
    private static ConfigurationStore _instance = null;

    public static ConfigurationStore Instance {
        get {
        if(_instance == null)
        {
            _instance = new ConfigurationStore();
        }

        return _instance;
        }
    }

    public string GetValue(string key)
    {
        ....
    }

    public Object GetObject(string key)
    {
        ...
    }
}

قد تفكر في النظر إلى البرامج النصية Nant للأتمتة مع بعض الأداة المساعدة .NET المخصصة لمعالجة مفاتيح التكوين.

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