Quali sono le mie opzioni per esporre le impostazioni di personalizzazione all'utente amministratore?

3

Sto scrivendo un sistema di blog come esercizio di apprendimento e vorrei consentire all'amministratore (o proprietario del blog) di selezionare / modificare alcune opzioni personalizzate in base alle funzionalità che scelgo di esporre a loro come ad esempio:

  • cambia nome blog (stringa)
  • seleziona il layout (int)
  • numero di post di blog per pagina (int)
  • più cose come questa ...

L'unico modo in cui posso davvero pensare di farlo è creando una classe, con una proprietà per ogni opzione e lasciando che il proprietario ottenga e imposti le proprietà.

Quali sono le mie opzioni per esporre le impostazioni di personalizzazione all'amministratore / proprietario?

Ecco come l'ho implementato per il momento, anche se sono consapevole che questo potrebbe non essere il modo migliore per farlo:

Ho creato una classe chiamata Setting.cs

    public class Setting : IEntity
    {
        [Key]
        public int Id { get; set; }
        public string BlogName { get; set; }
        public string SubTitle { get; set; }
        public int PostsPerPage { get; set; }

    }

Poi ho aggiunto un metodo di impostazione al mio controller Admin Dashboard in questo modo:

    public ActionResult Settings(int? id = 1)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Setting set = db.Settings.Find(id);

        if (set == null)
        {
            return HttpNotFound();
        }
        return View(set);
    }


    [HttpPost]
    [ValidateAntiForgeryToken]
    [ValidateInput(false)]
    public ActionResult Settings([Bind(Include = "Id,BlogName,SubTitle,PostsPerPage")] Setting sets)
    {
        if (ModelState.IsValid)
        {
            db.Entry(sets).State = System.Data.Entity.EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index", "Dashboard");
        }
        return View(sets);
    }

Ho quindi estratto il record e recuperato lo stesso record e aggiornato con le nuove impostazioni ogni volta.

Suppongo che dovrei esprimere le mie preoccupazioni:

  • Sembra strano memorizzare una singola riga di dati nella propria tabella del mio database.
  • Sembra strano che, se lo si volesse, si potrebbe istanziare la classe Settings.cs e possibilmente creare più record di essa.
  • Ho hardcoded il mio controller con l'ID del record, così come tutte le chiamate al controller, che a me sembrano abusi dello scopo di usare un controller codificandolo con cura.

Sono nuovo alla programmazione ma questo non mi sembra giusto. Nella programmazione di Swift iOS ho potuto creare un pList (flat-file) o memorizzare le impostazioni in NSUserDefaults. Mi sto solo chiedendo quali sono le mie opzioni in ASP.NET MVC.

Originariamente volevo chiedere "Qual è il modo migliore per implementare le impostazioni di amministratore / proprietario?" ma non volevo che la mia domanda fosse chiusa come soggettiva. Tuttavia, spero di poter dedurre quale sia il metodo preferito in definitiva per aderire alle migliori pratiche.

    
posta Dan Beaulieu 28.05.2015 - 03:48
fonte

2 risposte

3

La mia esperienza è che le "impostazioni" supportate da C # non sono molto utili.

Memorizzare le impostazioni nel database è un'idea molto migliore per una serie di motivi.

  1. Sarà possibile eseguire un backup completo del blog eseguendo il backup del database senza dover ricordare quali altri file sono necessari.

  2. Se un giorno deciderai di utilizzare questo tuo sistema, che attualmente implementa un singolo blog per un singolo utente e trasformarlo in una piattaforma di blogging che supporta molti blog gestiti da più utenti, creerai solo più impostazioni record, uno per ogni utente, e almeno quella parte sarà curata. Con un file di impostazioni, una cosa del genere sarebbe impossibile, dovresti sicuramente riscrivere il tuo meccanismo delle impostazioni per utilizzare il database a quel punto.

  3. Potrebbe essere necessario che le tue impostazioni facciano riferimento a righe nel database, nel qual caso ha senso solo memorizzare le impostazioni nel database per godere dei vantaggi del controllo dell'integrità referenziale. Ad esempio, potresti voler aggiungere un'impostazione per un "post appiccicoso" che deve essere sempre visualizzato per primo, indipendentemente da quanti anni ha. Se si utilizza un file di impostazioni, l'impostazione "post-id adesivo" sarà solo un numero privo di significato, interpretato dal codice in modo che corrisponda (si spera) a un post del blog. Se si memorizzano le impostazioni nel database, l'RDBMS si assicurerà che questo numero sia effettivamente l'id effettivo di una riga esistente nella tabella dei post del blog. (O NULL, se non vuoi un post appiccicoso.)

Devo andare avanti?

Il modo in cui questo viene solitamente realizzato consiste nell'avere una tabella delle impostazioni con una singola riga al suo interno. Questa non è solo un'idea selvaggia che hai avuto, è una tecnica legittima che ha un'applicazione reale nel mondo reale.

Non c'è modo di garantire che le righe aggiuntive non vengano mai aggiunte accidentalmente alla tabella delle impostazioni, ma almeno puoi contare le righe durante l'avvio e visualizzare un messaggio di errore se viene trovata più di una riga.

Puoi facilmente garantire che ci sarà sempre una sola istanza dell'oggetto settings aggiungendo un membro private static bool ad esso, e Assert ing dal costruttore dell'oggetto che questo bool è false , quindi impostandolo su true . Ciò significa che il costruttore può essere invocato solo una volta.

    
risposta data 04.06.2015 - 22:59
fonte
1

A seconda del tuo framework, solitamente esiste un tipo di metodo di persistenza semplice per questi tipi di valori non relazionali.

Java ha proprietà
C # (. Net framework) ha le impostazioni

    
risposta data 01.06.2015 - 20:16
fonte

Leggi altre domande sui tag