صافي MVC - العالمية إعدادات الدرجة - أي من هذه الأساليب هو أفضل:

StackOverflow https://stackoverflow.com/questions/642392

سؤال

وOK حتى ايم محاولة لإنشاء فئة إعدادات لتخزين بعض السلاسل التي أنا بحاجة للوصول إلى جميع أنحاء النظام. لقد خلق globalSettings.cs مع رمز أدناه:

public class GlobalSettings
{
    private readonly Hashtable myHT;

    public GlobalSettings()
    {
        //Hashtable used to store global strings
        myHT = new Hashtable();
        myHT.Add("logCategory","TMBC"); //event log category
        myHT.Add("logSource", "MVC"); //event log source


        //setup required options

        //Create log source if required
        if (!EventLog.SourceExists(myHT["logSource"].ToString()))
        {
            EventLog.CreateEventSource(myHT["logSource"].ToString(), myHT["logCategory"].ToString());
        }

    }

    public string getSetting(string key)
    {
        return myHT.ContainsKey(key) ? myHT[key].ToString() : null;
    }
}

في هذه اللحظة لقد initialised هذه الفئة في كل واحدة من وحدات تحكم بلدي بما يلي:

protected GlobalSettings globalSettings = new GlobalSettings();

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

وسأكون أفضل حالا توسيع الطبقة تحكم بالمعلومات وضع في ذلك؟

**

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

المحلول

وشخصيا، فما استقاموا لكم فاستقيموا بدلا تجزئة تلك الأشياء. على سبيل المثال، لماذا كل حدات التحكم الخاصة بك تحتاج لمعرفته حول كتابة سجلات الأحداث؟ كنت قد فئة LogWriter واحدة واجهة ILogWriter، واستخدام التبعية حقن (انظر MVCContrib للعينات) - أي بمعنى

class FooController : Controller {
    private readonly ILogWriter logWriter;
    public FooController(ILogWriter logWriter) {
        this.logWriter = logWriter; // <==== edited for clarity
    }
}

(وباستخدام وحدة تحكم المصنع القائم على DI)

وهذا يسمح لك لاختبار وحدة السجل كتابة ساخرا سجل الكاتب. ثم أن تناسب الإعدادات بشكل معقول كثوابت (أو المنال من التكوين) داخل الطبقة LogWriter.


ورد على سؤال محدد. إذا كان كل القيم ثابتة، استخدم الثوابت (أو خصائص ربما ثابتة):

public static GlobalSettings
{
    public static const string LogCategory = "TMBC"; //event log category
    public static const string LogSource = "MVC"; //event log source
}

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

نصائح أخرى

وMarc Gravell

وحتى الآن لدي بلدي حدة تحكم رئيسية:

    public class TasksController : Controller
{
    private tasklistDataContext db = new tasklistDataContext();

    public TasksController(ILogWriter myWriter)
    {
        /* constructor */
    }


    //displays list of tasks
    public ActionResult Index()
    {
        ViewData["Message"] = "Task List";



        IOrderedQueryable<task> tasks = from t in db.tasks orderby t.entryDate descending select t;

        return View(tasks.ToList());
    }


}

والطبقة ILogWriter حتى الآن هو التالي:

    public class ILogWriter
{
    public static string logCategory;
    public static string logSource;

    public ILogWriter()
    {

        logCategory = "TMBC";
        logSource = "MVC";

        //Create log source if required
        if (!EventLog.SourceExists(logSource))
        {
            EventLog.CreateEventSource(logSource, logCategory);
        }

    }

    public void writeLog(string eventMsg)
    {
        EventLog.WriteEntry(logSource, eventMsg, EventLogEntryType.Error);
    }

}

وأعرف أن هذا يجب أن تكون بسيطة ولكن أنا غير مألوف جدا مع صافي أنا العثور عليه قليلا تحدي في الوقت الراهن:)

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