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

Detaillierte Erklärung von .NET unter Linux/mvc/Struktur von cms-Programmen

CMS-Programmarchitektur

Dieses Programm wird hauptsächlich für die Entwicklung von Unternehmenswebseiten verwendet und kann auch als Blog-Programm dienen. Das Programm wurde von einem früheren .NET-Blog-Programm verbessert und die Haupttechnologien von Webform in .NET MVC umgestellt. Da es sich um ein sehr frühes Projekt handelt,12im Jahr war MVC3Version, natürlich immer noch unter Linux laufen.

Technologiestack .NET Framework 4.0 SQLite-Datenbank, Mono Linux-Betriebssystemumgebung sowie die SQLite-Bibliothek unter Mono, Razor-Template-Engine, dapper Lightweight ORM-Framework vs2017 Community-Version

Diese Entwicklungsumgebung ist ziemlich neu, beim letzten Mal habe ich vs2010verwendet, der Umfang ist recht groß, und dieses Projekt war vorher auch10Entwickelt, obwohl man2017hat eigentlich keinen Einfluss.

Der Razor-Engine ist viel benutzerfreundlicher als NVelocity und integriert gut mit der Backend-Engine.

Und dieses Projekt verwendet vollständig dapper orm, und die Operationen der Datenbankzugriffs-Schicht sehen auch viel sauberer aus.

Code-Struktur

Die linken Seiten sind hauptsächlich in drei Ordner unterteilt: Jqpress.web enthält die Web-Routen-Entrées, Designoberflächen, statische Dateien, den Upload-Ordner und die Backend-Management-Programme, die durch die Areas-D domänenbasierte Verwaltung realisiert werden. Die Projektstruktur ist recht klar.

Routenentwurf

Der Routeneingang ist HomeController dieser Datei, einschließlich der Startseite, der Produktliste, der Artikelliste, des Artikels, etc., die alle durch diesen Controller geroutet werden. Obwohl die Funktionen viele sind, beträgt die Codeamount nicht300 Zeilen, die Geschäftslogik wird hauptsächlich in der Service-Schicht behandelt.

Hier ist ein Beispiel für die Action-Logik einer Listeines Interfaces20 Zeilen

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 + ",
    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);
  }

Template-Engine-Design

Der Template-Engine ist razor, verschiedene CMS-Stilvorlagen sind in Form von Verzeichnissen im Themes-Verzeichnis gespeichert, durch die Backend-Einstellungen kann der Template-Switch jederzeit vorgenommen werden (dieses Feature wird noch verbessert).

Datenbank-Design

Als leichte CMS verwendet es natürlich nicht MySQL oder SQL Server, sondern bleibt standhaft sqlite, die oben beschriebenen Datenbankoperationen erfolgen über dapper, obwohl sie nicht so mächtig wie die von Microsoft hinzugefügte ORM sind, sind Lesbarkeit und Kontrolle sehr gut.

Da Linux unterstützt werden muss, müssen die SQLite-Operationen using Mono.Data.Sqlite; verwenden;
Natürlich kann man auf Windows umschalten, die von mir beschriebene Umschaltmethode ist sehr roh, Schüler, die Design Patterns gelernt haben, sollten sie in Minuten refaktorieren können, der Wechsel zwischen Windows und Linux ist sehr bequem.

Datenbankstruktur

jq_category Kategorie- und Tagetikettentabelle jq_comments Kommentar-Tabelle jq_links Freundelink- und Navigations-Einstellungen jq_posts Artikel-Tabelle jq_sites Standort-Zugriffsstatistiken und Artikel-, Kategorie- und Anzahl-Zähletabelle jq_users Konten-Tabelle

Die Datenbankstruktur ist nicht anders als die des vorherigen Blog-Programms, nur sind einige Tabellenstrukturfelder unterschiedlich.

Ausführung vs2017Vorschau im Debug-Modus

CMS-Startseite

Hintergrundanmeldung, Standardbenutzername admin, Passwort123456

Hintergrundseite

Artikelliste

Artikelbearbeitung

Deployment-Modus unter Linux mono

Das obige Bild zeigt die Installationsinformationen von mono auf meinem Server.

jexus

Unter Linux muss mono und jexus installiert werden, um ausgeführt zu werden, mono als Linux-Betriebsumgebung für .NET Framework, jexus als Webserver.

Jexus-Konfiguration, da ich auf meinem Server noch andere Sprachseiten habe, habe ich nicht direkt Jexus für den externen Dienst verwendet.

nginx

Nginx proxyt Jexus81Port, dieser Ort ist nicht obligatorisch, aber Nginx als reguläres Proxy-Programm kann .NET, php, java und andere auf dem Server ausführen, jeder für sich, Blumenblüten

Verzeichnisbeschreibung

.net mvc3Bei der Installation unter Linux ist zu beachten, dass alle von der Projektunterverzeichnis referenzierten DLLs in das Verzeichnis "bin" hochgeladen werden müssen. Und es muss auch "Microsoft.web.Infrastructure.dll" hochgeladen werden, die für die Veröffentlichung von MVC-Projekten erforderlich ist. Man kann vergleichen, dass der bin-Ordner unter meinem Linux-Blog-Programm-Server im Verzeichnis "webform" nur Mono und Nvelocity einfügt2eine Drittanbieter-DLL, der Rest sind eigene Geschäftsprogramme. Dieser .NET CMS benötigt ziemlich viel, wie Sie im Bild sehen können, ist dies der Inhalt des bin-Verzeichnisses meines Blog-Sites.

Probleme mit .NET-Programmen auf dem Linux-Server. Jexus unterstützt chinesische Zeichen nicht, daher muss der Pfad der Dateiuploads in das Format aus Buchstaben und Ziffern umgeschrieben werden. Der Jexus-Webserver ist standardmäßig auf Groß- und Kleinschreibung sensibel, daher muss beim Deployment unbedingt

Es reicht aus, das vor der Zeile "export MONO_IOMAP=..." im Skriptdatei "jws" das "#" zu entfernen, um ohne Unterschied in der Groß- und Kleinschreibung zu sein. Quellcode erhalten

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

Um zu verhindern, dass einige Schüler den Zugriff auf Github nicht haben, habe ich ihn auf oschina's gitee gestellt

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

Das ist alles, was wir für Sie zusammengetragen haben. Hoffentlich ist es Ihnen hilfreich. Wenn Sie noch weitere Fragen haben, können Sie im Kommentarbereich unten diskutieren. Vielen Dank für Ihre Unterstützung für das Anlaufpunkt-Tutorial.

Vermutlich auch interessant