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.