English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spiegazione dettagliata della struttura del programma .NET/MVC/CMS sotto Linux

Architettura del programma cms

Questo programma è principalmente utilizzato per lo sviluppo di siti aziendali, può anche essere utilizzato come programma di blog, il programma è migliorato dal blog .net dell'articolo precedente, la principale tecnologia è passata da webform a .net mvc, poiché è un progetto molto vecchio, nel 2012 era ancora la versione mvc3, naturalmente, funziona sotto linux.

Tecnologie .net framework 4.0 sqlite database mono ambiente di esecuzione linux e libreria sqlite sotto mono razor motore di modello dapper framework orm leggero vs2017 versione community

Questa volta gli strumenti di sviluppo sono abbastanza nuovi, l'ultima volta usavo vs2010, la differenza è grande, e questo progetto è stato sviluppato sotto vs2010, anche se uso 2017, non ha avuto quasi alcun impatto.

Il motore razor è molto più facile da usare rispetto a nvelocity, e si integra bene con il back-end.

E questa volta il progetto utilizza completamente dapper orm, e l'operazione di accesso al database sembra molto più pulita.

Struttura del codice

La parte sinistra è principalmente divisa in tre cartelle, Jqpress.web è il deposito di ingressi di routing web, skin di modello, file statici, cartella di upload, e il programma di gestione后台 è realizzato attraverso l'amministrazione di aree. La struttura del progetto è abbastanza chiara.

Progettazione di routing

L'ingresso di routing è il file HomeController, che include la pagina iniziale, l'elenco dei prodotti, l'elenco degli articoli, il contenuto degli articoli e altro, tutti routing attraverso questo Controller. Nonostante le funzioni siano molte, il numero di righe di codice non supera le 300, e la gestione della logica aziendale è基本上在service layer.

Come segue, è la logica dell'azione di una pagina elenco con solo 20-30 righe.

public ActionResult Category(string pagename) 
  {
   var model = new PostListModel();
   CategoryInfo cate = _categoryService.GetCategory(pagename);
   model.Category = cate;
   if (cate != null)
   {
    int categoryId = cate.CategoryId;
    model.MetaKeywords = cate.CateName;
    model.MetaDescription = cate.Description;
    ViewBag.Title = cate.CateName;
    model.Url = ConfigHelper.SiteUrl + "category/" + Jqpress.Framework.Utils.StringHelper.SqlEncode(pagename) + "/page/{0}";
    const int pageSize = 10;
    int count = 0;
    int pageIndex = PressRequest.GetInt("page", 1);
    int cateid = PressRequest.GetQueryInt("cateid", -1);
    int tagid = PressRequest.GetQueryInt("tagid", -1);
    if (cateid > 0)
     pageIndex = pageIndex + 1;
    var cateids = categoryId + "," + _categoryService.GetCategoryList().FindAll(c => c.ParentId == categoryId).Aggregate(string.Empty, (current, t) => current + (t.CategoryId + ",")).TrimEnd(',');
    var postlist = _postService.GetPostPageList(pageSize, pageIndex, out count, cateids.TrimEnd(','), tagid, -1, -1, -1, -1, -1,-1, "", "", "");
    model.PageList.LoadPagedList(postlist);
    model.PostList = (List<PostInfo>)postlist;
   }
   model.IsDefault = 0;
   return View(model.Category.ViewName, model);
  }

Progettazione del motore di template

Il motore di template utilizza razor, i template di stile diversi del cms sono conservati sotto forma di cartelle nella cartella Themes, è possibile passare da un template all'altro tramite la configurazione del backend (questa funzione è ancora in fase di completamento).

Progettazione di archiviazione dei dati

Come cms leggero, ovviamente non utilizza mysql o sqlserver, ma rimane fedele a sqlite, come sopra attraverso dapper per operazioni sul database, anche se non è così potente come l'orm aggiunto da Microsoft, ma la leggibilità e la manipolabilità sono molto buone.

Poiché deve supportare linux, le classi di operazione sqlite devono utilizzare using Mono.Data.Sqlite;
Certo, puoi passare a windows, il modo di switch che ho scritto sopra è troppo rude, gli studenti che hanno studiato il design pattern dovrebbero essere in grado di ristrutturare in pochi minuti, passare da windows a linux è molto conveniente.

Struttura del database

jq_category tabella di classificazione e etichetta jq_comments tabella di commenti jq_links impostazioni di link amico e navigazione jq_posts tabella degli articoli jq_sites statistiche di accesso ai siti e tabella di conteggio degli articoli, delle classificazioni e delle quantità jq_users tabella degli account

La struttura del database non ha differenze rispetto al programma di blog precedente, ma ci sono differenze nelle strutture di alcune tabelle

Esecuzione vs2017 in modalità di debug e anteprima

Pagina iniziale del cms

Accesso di amministrazione, nome utente predefinito admin, password 123456

Pagina iniziale di amministrazione

Elenco degli articoli

Redazione dell'articolo

Modalità di distribuzione sotto linux mono

L'immagine sopra mostra le informazioni di installazione di mono sul mio server.

jexus

Sotto linux è necessario installare mono e jexus per farlo funzionare, mono come ambiente di esecuzione di .NET Framework per linux, jexus come server web.

Configurazione di jexus, poiché il mio server ha altri siti in altre lingue, non ho adottato direttamente jexus per il servizio esterno.

nginx

Nginx ha proxyato il port 81 di jexus. Questo non è obbligatorio, ma come software di proxy standard, Nginx può eseguire .net, php, java e altri su un server, ciascuno a suo posto, in fiorente competizione.

Spiegazione della cartella bin

Attenzione durante l'installazione di .net mvc3 su Linux: è necessario caricare tutti i dll di riferimento nel directory bin del progetto. Inoltre, è necessario caricare Microsoft.web.Infrastructure.dll, che è necessario per pubblicare il progetto mvc. Puoi confrontare il mio programma di blog Linux nel sotto-cartella bin di webform, che introduce Mono e Nvelocity come dll di terze parti, mentre tutti gli altri sono programmi di business propri. Questo .net cms richiede molte cose, ecco il contenuto della cartella bin del mio sito di blog.

Problemi di programmi .net su server Linux. Jexus non supporta i caratteri cinesi, quindi il percorso di upload dei file deve essere modificato in formato lettere e numeri. Jexus web server è predefinitamente sensibile alle maiuscole e minuscole, quindi è necessario fare attenzione durante il deploy

Basta rimuovere il "#" davanti alla frase "export MONO_IOMAP=..." nel file di script jws per non distinguere tra maiuscole e minuscole. Ottieni il codice sorgente

https://github.com/robotbird/jqpress.cms

Per prevenire che alcuni studenti non possano accedere a Github, ho messo su Gitee di oschina

https://gitee.com/robotbird/jqpress.cms

Questo è tutto il contenuto che abbiamo raccolto per voi questa volta, speriamo che vi sia utile. Se avete domande o dubbi, potete discuterli nella sezione dei commenti sottostante. Grazie per il supporto al tutorial di urla.

Ti potrebbe interessare