Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 19 Min.

Webshop für ASP.NET Core

Wer mit ASP.NET Core eine Shopping-Cart-Lösung benötigt, erhält mit dem Projekt nopCommerce eine kostenlose und quelloffene E-Commerce-Plattform.
© dotnetpro
Die Auswahl der richtigen E-Commerce-Plattform ist ein entscheidender Faktor für den Erfolg eines Online-Shops. Das gilt auch für die Entscheidung Make versus Buy und dafür, welche Technologien zum Einsatz kommen sollen, wenn es sich um eine Make-Lösung handelt. Eine solche Auswahl ist nicht leicht zu treffen. Soll die E-Commerce-Plattform selbstimplementiert sein, ist nicht zwingend alles von Grund auf neu zu erstellen. Es gibt zahlreiche Projekte, darunter nopCommerce, die Unterstützung bieten, um den Aufwand und damit die Kosten geringer zu halten.nopCommerce ist eine robuste und flexible Open-Source-E-Commerce-Lösung. Das Projekt gilt als anpassungsfähig, erweiterbar und bietet leistungsstarke Features, um E-Commerce-Lösungen auf der Basis von ASP.NET Core zu erstellen.Die Plattform zeichnet sich durch ihre Fähigkeit aus, damit sowohl einfache als auch komplex strukturierte Online-Shops betreiben zu können. nopCommerce kommt mit einer umfassenden Palette von Features, die es ermöglichen, einen Online-Shop nach spezifischen Geschäftsbedürfnissen zu gestalten. Dazu gehören Mehrsprachigkeit, Multi-Store-Fähigkeit, eine flexi­ble Preisgestaltung, fortschrittliche SEO-Tools und umfassende Sicherheitsmaßnahmen. Darüber hinaus ermöglicht die Open-Source-Natur von nopCommerce eine breite Anpassung durch eine aktive Entwicklergemeinschaft, die kontinuierlich dazu beiträgt, die Plattform zu verbessern und zu erweitern.In dieser Ausgabe von Frameworks und mehr liegt der Fokus daher auf dem Framework nopCommerce, um Online-Shops mit ASP.NET Core zu erstellen. Der Artikel gibt einen Einblick in das Projekt und zeigt, was damit möglich ist.

Was ist nopCommerce?

nopCommerce ist eine vielseitige und robuste Open-Source-Lösung, um eine breite Palette von Anforderungen an Online-Shops zu erfüllen. Als Open-Source-Plattform bietet nopCommerce Entwicklern und Shop-Betreibern eine transparente und flexible Lösung, die sie nach ihren spezifischen Anforderungen anpassen können. Diese Offenheit bedeutet, dass der Quellcode frei verfügbar ist, sodass sich die Anwendung problemlos modifizieren lässt. Der Quellcode steht auf GitHub [1] zur Verfügung.nopCommerce ist nicht nur wegen seiner Open-Source-Natur bemerkenswert, sondern auch durch seine Implementierung moderner .NET-Technologien. Es nutzt ASP.NET Core, sodass das Projekt nahtlos auf verschiedenen Betriebssystemen funktioniert und von den neuesten Entwicklungen in der .NET-Welt profitiert, einschließlich besserer Unterstützung für Cloud-basierte Hosting-Umgebungen, verbesserter Skalierbarkeit und einfacherem Deployment.Der Einsatz moderner .NET-Technologien macht nopCommerce besonders attraktiv für alle, die bereits mit dem Micro­soft-Technologiestack vertraut sind. Sie finden eine ihnen geläufige Umgebung vor, die es ermöglicht, robuste, sichere und skalierbare E-Commerce-Lösungen zu erstellen, ohne sich in eine völlig neue Softwarearchitektur einarbeiten zu müssen. In der .NET-Community hat nopCommerce einen besonderen Stellenwert eingenommen, indem es ­eine der führenden E-Commerce-Lösungen innerhalb dieses Technologie-Ökosystems geworden ist.Nop Solutions [2] entwickelt das Projekt aktiv weiter. Die Organisa­tion auf GitHub zeigt, dass das Team auch für zahlreiche Plug-ins verantwortlich ist und diese ebenfalls aktiv pflegt und weiterentwickelt. Beim Schreiben dieses Artikels steht Version 4.70.0 von nopCommerce aus dem April 2024 zum Download zur Verfügung. Die Open-Source-Version von nopCommerce ist unter der nopCommerce Public License lizenziert. Es handelt sich im Grunde um eine GNU Affero General Public License Version 3 [3] (GNU AGPL v3.0) plus die Textanforderung „powered by nopCommerce“ auf jeder einzelnen Seite. Die nopCommerce Public License Version 4.0 (NPL) besteht aus der Lizenz GNU AGPL v3.0 mit der beschriebenen zusätzlichen Bedingung.

Entwicklungsgeschichte und Architektur

Die Geschichte von nopCommerce beginnt im Jahr 2008, als der Gründer Andrei Mazulnitsyn [4] das Projekt ins Leben rief. Ziel war es, eine flexible und zugleich kostenlose E-Commerce-Lösung auf Basis der .NET-Technologie zu schaffen. Von Beginn an wurde nopCommerce als Open-Source-Projekt entwickelt, um eine breite Gemeinschaft von Entwicklern und Nutzern einzubinden und eine vielseitige Plattform zu schaffen, die sich leicht an die individuellen Bedürfnisse der Nutzer anpassen lässt.In den Anfangsjahren konzentrierte sich nopCommerce darauf, eine solide Basis mit einer Reihe von grundlegenden E-Commerce-Funktionen zu bieten, darunter das Management von Warenkörben, Bestellprozesse und grundlegende SEO-Fähigkeiten. Die Plattform wurde schnell populär, da sie eine der ersten ihrer Art war, die speziell für die .NET-Plattform entwickelt wurde. Dies ermöglichte es .NET-Entwicklern, mit vertrauten Werkzeugen und Sprachen zu arbeiten, was die Akzeptanz und das Wachstum der Plattform erheblich beschleunigte.Die ursprüngliche Architektur von nopCommerce basierte auf ASP.NET Web Forms, einer Technologie, die zu der Zeit weit verbreitet war und eine strukturierte Umgebung für die Entwicklung von Webanwendungen bot. Web Forms nutzte ein eventbasiertes Modell, das eine einfache Handhabung von Benutzereingaben und serverseitigen Aktionen ermöglichte. Allerdings hatte dieser Ansatz auch Nachteile, insbesondere was die Testbarkeit und die Wartung des Codes betrifft. Zudem war diese Technologie nicht optimal für moderne, interaktive Webanwendungen geeignet.Die Entscheidung, von Web Forms zu ASP.NET MVC zu wechseln, markierte einen signifikanten Wendepunkt in der Entwicklung von nopCommerce. Dieser Wechsel erfolgte mit der Veröffentlichung von nopCommerce 1.90 im Jahr 2011. ASP.NET MVC bot ein Model-View-Controller-Architekturmodell, das eine klarere Trennung zwischen der Logik der Anwendung und ihrer Darstellung ermöglichte. Dies förderte nicht nur eine sauberere und besser wartbare Codebasis, sondern erleichterte auch das Testen und die Weiterentwicklung der Plattform.ASP.NET MVC war ein Schritt in Richtung moderner Web­entwicklungstechniken, einschließlich der Unterstützung für RESTful-URLs und einer verbesserten Benutzererfahrung durch Ajax-Integration. Diese Änderungen waren entscheidend, um nopCommerce flexibler und leistungsfähiger zu machen und die Bedürfnisse einer sich schnell entwickelnden E-Commerce-Landschaft zu erfüllen.Der vielleicht größte Schritt in der technologischen Evolution von nopCommerce aber war der Übergang zu ASP.NET Core, der mit der Veröffentlichung von nopCommerce 4.00 im Jahr 2017 erfolgte. ASP.NET Core ist eine Neuentwicklung von Microsofts Webframework, die Plattformunabhängigkeit und verbesserte Leistung bietet. Es handelt sich um eine modulare Plattform, die es Entwicklern ermöglicht, nur die Komponenten zu verwenden, die sie benötigen, und die auch auf Nicht-Windows-Plattformen wie Linux und macOS betrieben werden kann. Dies eröffnete nopCommerce neue Märkte und Nutzergruppen und verbesserte die Skalierbarkeit und Effizienz der Plattform.Der Übergang zu ASP.NET Core war auch eine Antwort auf die wachsenden Anforderungen an moderne Webanwen­dungen hinsichtlich Leistung, Skalierbarkeit und Sicherheit. ASP.NET Core bietet bedeutende Verbesserungen in der Verarbeitungsgeschwindigkeit und Effizienz, was es ideal für hoch skalierbare E-Commerce-Systeme macht, die mit großen Mengen an Daten und hohem Benutzeraufkommen umgehen müssen. Darüber hinaus verbesserten die Unterstützung für Dependency Injection, eine bessere Routing-Engine und eingebaute Unterstützung für Unit-Testing die Entwick­ler­erfahrung und die Qualität der Anwendungen.Die Migration von nopCommerce auf .NET 7 stellt einen weiteren Fortschritt in der technologischen Entwicklung der Plattform dar. Diese Migration ermöglicht es nopCommerce, von allen Verbesserungen und Optimierungen zu profitieren, die mit .NET 7 eingeführt wurden, einschließlich besserer Unterstützung für asynchrone Programmierung, verbesserter Garbage Collection und neuen APIs für Blazor, die die Entwicklung von interaktiven Web-UIs vereinfachen. Darüber hinaus verbessert .NET 7 die Plattformunabhängigkeit, was nopCommerce ermöglicht, auf einer Vielzahl von Betriebssystemen effizienter zu laufen.

Technik unter der Haube

nopCommerce zeichnet sich durch seine moderne und robuste Architektur aus, die auf den Prinzipien der Best Practices in der Softwareentwicklung basiert. Zu den Schlüsselkomponenten dieser Architektur gehören Validierung, die Injektion von Abhängigkeiten, Objektmapping und der Datenzugriff.
  • Validierung:nopCommerce führt die Validierung auf verschiedenen Ebenen durch, um die Integrität der Daten zu gewährleisten. Dazu gehören sowohl clientseitige als auch serverseitige Validierungen. Clientseitige Validierung verbessert die Benutzererfahrung, indem sie sofortiges Feedback liefert, während serverseitige Validierung sicherstellt, dass auch bei Umgehung der Client-Logik gültige Daten verarbeitet werden. nopCommerce nutzt Data Annotations und Fluent Validation [5], um eine umfassende Validierungslogik zu implementieren, die leicht erweiterbar und anpassbar ist.
  • Dependency Injection (DI): DI ist ein zentrales Element in der Architektur von nopCommerce und kommt intensiv zum Einsatz, um die Kopplung zwischen den Komponenten zu verringern und die Testbarkeit zu verbessern. nopCommerce verwendet das in ASP.NET Core integrierte DI-System, welches eine flexible und leistungsstarke Methode zur Verwaltung von Abhängigkeiten bietet. Durch die Verwendung von DI kann nopCommerce leicht erweitert und angepasst werden, indem einfach neue Services oder Repositories injiziert werden, ohne bestehenden Code zu ändern.
  • Objektmapping: nopCommerce verwendet Automapper [6], ein Tool zur Objekt-Objekt-Abbildung, um die Datenübertragung zwischen verschiedenen Schichten und Modellen zu vereinfachen. Dies reduziert den manuellen Codeaufwand und minimiert die Fehleranfälligkeit beim Übertragen von Daten zwischen den DTOs (Data Transfer Objects) und den Domänenmodellen. Automapper hilft, den Code sauber und wartbar zu halten, indem er die Notwendigkeit eliminiert, explizite Konvertierungsmethoden zu schreiben.
  • Datenzugriff: nopCommerce setzt auf das Entity Framework Core [7] für den Datenzugriff, was eine hohe Leistungsfähigkeit und Skalierbarkeit garantiert. Durch die Verwendung von Entity Framework Core kann nopCommerce von dessen Fähigkeiten wie LINQ-Abfragen, Caching und der Unterstützung verschiedener Datenbankplattformen profitieren. Dies erleichtert die Datenmanipulation und -verwaltung und bietet gleichzeitig eine leistungsstarke Abstrak­tionsschicht, die den direkten Datenbankzugriff minimiert und die Datenintegrität erhöht.
Eine der größten Stärken von nopCommerce ist seine umfassende Anpassbarkeit und Erweiterbarkeit, die hauptsächlich durch Plug-ins und Themes (Designs) ermöglicht wird.
  • Plug-ins: Plug-ins in nopCommerce ermöglichen es, die Funktionalität der Plattform zu erweitern, ohne den Code des Kernprojekts zu ändern. Dieses System ist so konzipiert, dass es sicher und isoliert ist, wobei jedes Plug-in in einer Sandbox-Umgebung ausgeführt wird, um die Stabilität und Sicherheit der gesamten Anwendung nicht zu beeinträchtigen. Entwickler können nahezu jeden Aspekt von nopCommerce durch Plug-ins erweitern, von der Zahlungsabwicklung über die Versandmethoden bis hin zu SEO-Tools und Marketingfunktionen. Beispiele zu Plug-ins folgen im weiteren Verlauf des Artikels.
  • Themes: Das Theming-System von nopCommerce ermöglicht es Designern und Entwicklern, das Erscheinungsbild des Online-Shops anzupassen. Durch die Verwendung von Themes lassen sich das Layout, die Farben, die Schriftarten und andere visuelle Elemente recht einfach anpassen. Themes sind so gestaltet, dass sie unabhängig vom Kernsystem funktionieren, was die Aktualisierung von nopCommerce erleichtert, ohne die individuellen Anpassungen zu beeinträchtigen.

Hosting-Möglichkeiten

nopCommerce ist für seine Flexibilität und Anpassungsfähigkeit bekannt und bietet verschiedene Hosting-Optionen, um unterschiedlichen Anforderungen gerecht zu werden. Die nachfolgend genannten Hosting-Möglichkeiten stehen für das Projekt zur Verfügung. Auf der Website von nopCommerce ist darüber hinaus eine Liste von Partnern [8] verfügbar:
  • Shared Hosting: Dies ist eine kostengünstige Option, bei der mehrere Websites auf demselben Server gehostet werden. Für kleinere Shops oder zum Ausprobieren von nopCommerce kann dies eine geeignete Option sein. Wichtig ist jedoch, dass das Hosting ASP.NET Core unterstützen muss, was insbesondere bei kleineren Anbietern oder kostengünstigen Hosting-Paketen nicht zwingend gegeben ist.
  • VPS (Virtual Private Server): Ein VPS bietet mehr Kontrolle und Ressourcen als Shared Hosting. Nutzer können die Serverumgebung vollständig anpassen, was bei nopCommerce von Vorteil sein kann, da es reichlich Konfigurationsmöglichkeiten gibt.
  • Dedizierte Server: Dies ist die teuerste Option, bietet jedoch die höchste Leistung und Kontrolle. Ein dedizierter Server ist ideal für große E-Commerce-Plattformen mit hohem Traffic.
  • Cloud-Hosting: Dienste wie Azure, AWS oder Google Cloud bieten skalierbare und flexible Hosting-Lösungen, die sich ideal für nopCommerce eignen, insbesondere wenn Sie planen, zu wachsen oder Spitzenlasten zu bewältigen. In Kombination mit dem Anbieter WinHost [9] bietet nopCommerce eine vorgefertigte Installation an, sodass die Plattform direkt zur Verfügung steht. Das Angebot ist skalierbar, 30 Tage kostenfrei und ist technisch zwischen einem Cloud-Hosting mit Shared Hosting Option angesiedelt. Eine vollständig verwaltete, private Cloud-Hosting-Option bietet zum Beispiel Everleap Managed Services [10] an. Auch bei diesem Angebot ist nopCommerce vorinstalliert.

Systemanforderungen

nopCommerce hat einige Systemanforderungen, die erfüllt sein müssen, um das Projekt zu betreiben. Bei den Betriebssystemen besteht die Auswahl zwischen Windows, Linux und macOS. Dabei bietet das Projekt eine breite Unterstützung für jeweilige Versionen, wie zum Beispiel Windows 10, 11, Server, Red Hat 8 oder höher, Debian 11 oder höher, Alpine Linux 3.16 oder höher sowie macOS X 12.0 oder höher.Für die Produktion ist IIS als Webserver unter Windows die bevorzugte Wahl. nopCommerce kann auch auf anderen Webservern wie Kestrel oder Nginx laufen, besonders wenn es unter Linux oder anderen Nicht-Windows-Betriebssystemen betrieben wird. Für die Administration und das Browsen des Shops wird ein moderner Webbrowser wie Chrome, Firefox, Safari oder Edge benötigt.Microsoft SQL Server 2012 oder höher ist die empfohlene Datenbank für den Betrieb von nopCommerce, einschließlich der Express-Editionen, die für kleinere Websites ausreichend sind. Alternativ kann nopCommerce auch mit anderen Datenbanken wie MySQL konfiguriert werden, indem entsprechende Datenbankprovider zum Einsatz kommen. Der My­SQL Server 5.7 oder höher steht ab nopCommerce 4.30 zur Auswahl. Ab Version 4.40 des Projekts lässt sich auch PostgreSQL 9.5 oder höher nutzen.nopCommerce setzt auf .NET Core, um zu laufen. Die genaue Version von .NET Core hängt von der Version von nopCommerce ab, die zum Einsatz kommen soll. Zum Beispiel benötigt nopCommerce 4.40 .NET 5.0 oder höher. Ab Ver­sion 4.70 von nopCommerce setzt das Projekt auf .NET 8.Bezogen auf die Entwicklungsumgebung existieren ebenfalls einige Anforderungen. Für nopCommerce 4.70 oder höher ist beispielsweise Microsoft Visual Studio 2022 in Version 17.9 oder höher empfohlen, inklusive dem .NET 8 SDK. Für nopCommerce 4.60 oder höher ist ebenfalls Microsoft Visual Studio 2022 empfehlenswert, aber in Version 17.5 oder höher, dieses Mal in Kombination mit dem .NET 7 SDK.

Die Kernfunktionen im Überblick

Die Kernfunktionen machen nopCommerce zu einer beliebten Wahl für Online-Shops auf .NET-Basis. nopCommerce unterstützt beispielsweise mehrere Sprachen und Währungen, was es Händlern ermöglicht, global tätig zu sein und Kunden weltweit anzusprechen. Durch die integrierte Unterstützung für mehrere Sprachen lassen sich Produkte, Kategorien und Inhalte komfortabel übersetzen und lokalisieren. Die Plattform lässt sich so konfigurieren, dass sie problemlos lokale Sprachen und Währungen unterstützt, um die Zielgruppe zu vergrößern.Zudem ist das Projekt vollständig responsiv und bietet eine optimierte Benutzererfahrung auf verschiedenen Geräten, einschließlich Desktops, Tablets und Smartphones – ein sehr wichtiges Kriterium für die Nutzung durch Kunden. nopCommerce bietet auch eine Vielzahl von Preisgestaltungsoptionen, einschließlich Rabatten, Gutscheinen, Mengenrabatten und zeitlich begrenzten Angeboten. Diese Funktionen ermöglichen es, flexible Marketingstrategien zu implementieren.Die Plattform ermöglicht ein umfassendes Produktmanagement, einschließlich Unterstützung für mehrere Produktvarianten, Kategorien und Hersteller sowie umfangreiche Produktbeschreibungen. Zudem lassen sich Produkte mit Tags versehen und Bewertungen verwalten. Ein Beispiel für das Frontend des Shops ist in Bild 1 zu sehen.
Ein Beispiel-Frontend für den nopCommerce-Shop (Bild 1) © Autor
nopCommerce bietet ausgezeichnete SEO-Funktionen, die dafür sorgen, dass die erstellten Online-Shops in Suchmaschinen gut ranken. Dazu gehören suchmaschinenfreundliche URLs, Meta-Tags, XML-Sitemaps, Canonical-Tags und die Möglichkeit, benutzerdefinierte Titel und Beschreibungen für jede Seite festzulegen.Auch eine Reihe von Sicherheitsfunktionen sind mit an Bord, um sowohl die Daten der Händler als auch die der Kunden zu schützen. Dazu gehören SSL-Unterstützung, Formularvalidierung und erweiterte Sicherheitskonfigurationen für Benutzerrollen und Berechtigungen. Bild 2 zeigt einen Einblick in die Übersicht der Bestellungen im Backend von nopCommerce.
Ein Beispiel-Backend für den Shop (Bild 2) © Autor
Darüber hinaus bietet nopCommerce eine leistungsstarke Multi-Vendor-Funktion, die es mehreren Anbietern ermöglicht, ihre Produkte auf einer einzigen Plattform zu verkaufen. Jeder Anbieter verfügt über ein eigenes Dashboard zur Verwaltung seiner Produkte, Bestellungen und Kunden. Dies ermöglicht es Shop-Betreibern, einen Marktplatz zu erstellen, auf dem verschiedene Anbieter ihre Produkte anbieten können, was die Vielfalt und Auswahl für die Kunden erhöht.nopCommerce unterstützt auch Dropshipping, eine beliebte Versandmethode, bei der der Händler die Produkte nicht auf Lager hat, sondern sie direkt vom Lieferanten an den Kunden versenden lässt. Mit nopCommerce können Shop-Betreiber Dropshipping-Partnerschaften eingehen und Bestellungen nahtlos an ihre Lieferanten weiterleiten. Dies vereinfacht den Bestellprozess und reduziert die Lagerkosten für Händler, während gleichzeitig eine breitere Produktpalette angeboten werden kann.

Verschiedene ­Schnittstellen

Um die Funktionalität von nopCommerce zu erweitern oder anzupassen, lassen sich verschiedene Interfaces einsetzen, um Plug-ins zu implementieren. Einige der wichtigsten Interfaces, die in nopCommerce für die Plug-in-Entwicklung zur Verfügung stehen, beschreibt die nachfolgende Auflistung:
  • IPlugin: Dies ist das grundlegende Interface, das jedes Plug-in implementieren muss. Es definiert Methoden zur Initialisierung des Plug-ins und gibt Informationen über das Plug-in zurück.
  • IPaymentMethod: Dieses Interface kommt in Zahlungs-Plug-ins zum Einsatz. Es umfasst Methoden zur Verarbeitung von Zahlungen, zur Anzeige von Zahlungsinformationen und zur Konfiguration der Zahlungsmethoden.
  • IShippingRateComputationMethod: Plug-ins, die Versandkosten berechnen, implementieren dieses Interface. Es stellt Funktionen bereit, um Versandkosten basierend auf verschiedenen Kriterien wie Gewicht, Dimension und Bestimmungsort zu berechnen.
  • ITaxProvider: Dieses Interface ist für Plug-ins gedacht, die Steuerberechnungen durchführen. Es ermöglicht die Definition von Steuerregeln und die Berechnung von Steuern auf Produkte und Versandkosten.
  • IWidgetPlugin: Widget-Plug-ins, die spezifische Funktionalitäten auf verschiedenen Seiten der Webseite einbetten, implementieren dieses Interface. Beispiele für solche Widget-Plug-ins könnten Social-Media-Buttons oder Kundenbewertungsformulare sein.
  • IDiscountRequirementRule: Plug-ins, die spezielle Anforderungen für Rabatte definieren, nutzen dieses Interface. Es hilft bei der Festlegung von Bedingungen, unter denen Rabatte gewährt werden.
  • IExternalAuthenticationMethod: Dieses Interface wird von Plug-ins verwendet, die externe Authentifizierungsdienste (wie OAuth über Facebook oder Google) integrieren.
  • IExchangeRateProvider: Für die Integration von Währungsumrechnungen können Plug-ins dieses Interface implementieren, um aktuelle Wechselkurse bereitzustellen.
Diese Interfaces sind Teil des Plug-in-Systems von nopCommerce und ermöglichen es, die Plattform in vielfältiger Weise zu erweitern und anzupassen. Jedes Interface zielt auf einen bestimmten Bereich der Funktionalität, was die Entwicklung von Plug-ins übersichtlich und modular gestaltet.

Entwicklung eines Rabatt-Plug-ins

Die Plug-in-Entwicklung für nopCommerce ermöglicht es, die Funktionalität der Plattform nach individuellen Bedürfnissen zu erweitern oder anzupassen. Plug-ins in nopCommerce sind eigenständige Erweiterungen mit einer eigenen Code-Basis. Im Folgenden sind zwei Beispiele für die Entwicklung solcher Plug-ins zu sehen, um einige der Konzepte zu erläutern.Das Ziel des ersten Plug-ins ist es, einen Mengenrabatt auf Produkte anzuwenden, wenn Kunden eine bestimmte Anzahl eines Artikels kaufen. Dazu ist ein neues Projekt des Typs Class Library notwendig, beispielsweise mit dem Namen QuantityDiscountPlugin. Anschließend ist die IDiscountRequirementRule-Schnittstelle zu implementieren, die von nopCommerce für Rabattlogiken verwendet wird. In der implementierten Methode CheckRequirement fehlt jetzt noch die Logik, die überprüft, ob die Anzahl der gekauften Artikel die Schwelle für den Mengenrabatt erreicht. Listing 1 zeigt den dazu notwendigen Code.
Listing 1: Code für das QuantityDiscountPlugin
<span class="hljs-keyword">using</span> Nop.Core;<br/><span class="hljs-keyword">using</span> Nop.Services.Discounts;<br/><span class="hljs-keyword">using</span> Nop.Services.Plugins;<br/><span class="hljs-keyword">using</span> System;<br/><span class="hljs-keyword">namespace</span> <span class="hljs-title">QuantityDiscountPlugin</span><br/>{<br/> <span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">QuantityDiscountRequirement</span> : <br/> <span class="hljs-title">IDiscountRequirementRule</span><br/> {<br/> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">bool</span> <span class="hljs-title">CheckRequirement</span>(</span><br/><span class="hljs-function"><span class="hljs-params"> DiscountRequirementValidationRequest request</span>)</span><br/><span class="hljs-function"> </span>{<br/> <span class="hljs-keyword">if</span> (request == <span class="hljs-literal">null</span>)<br/> <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> ArgumentNullException(<span class="hljs-keyword">nameof</span>(<br/> request));<br/> <span class="hljs-keyword">if</span> (request.Customer == <span class="hljs-literal">null</span>)<br/> <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> NopException(<br/> <span class="hljs-string">"A customer should be assigned"</span>);<br/> <span class="hljs-keyword">int</span> requiredQuantity = <span class="hljs-number">10</span>; <br/> <span class="hljs-comment">// Beispielwert für die erforderliche Menge</span><br/><span class="hljs-comment"> foreach (var item in </span><br/><span class="hljs-comment"> request.Customer.ShoppingCartItems)</span><br/><span class="hljs-comment"> {</span><br/><span class="hljs-comment"> if (item.Quantity >= requiredQuantity)</span><br/><span class="hljs-comment"> {</span><br/><span class="hljs-comment"> return true;</span><br/><span class="hljs-comment"> }</span><br/><span class="hljs-comment"> }</span><br/><span class="hljs-comment"> return false;</span><br/><span class="hljs-comment"> }</span><br/><span class="hljs-comment"> public void Install()</span><br/><span class="hljs-comment"> {</span><br/><span class="hljs-comment"> // Plugin-Installationslogik hier</span><br/><span class="hljs-comment"> }</span><br/><span class="hljs-comment"> public void Uninstall()</span><br/><span class="hljs-comment"> {</span><br/><span class="hljs-comment"> // Plugin-Deinstallationslogik hier</span><br/><span class="hljs-comment"> }</span><br/><span class="hljs-comment"> }</span><br/><span class="hljs-comment">}</span> 
Der Code prüft, ob ein Kunde die Anforderungen für einen Mengenrabatt erfüllt, indem die Bedingung überprüft wird, ob die Menge eines Artikels im Warenkorb des Kunden den festgelegten Schwellenwert, im Beispiel zehn Stück, erreicht oder überschreitet. Falls die Anforderungen erfüllt sind, wird true zurückgegeben, andernfalls false. Zusätzlich enthält der Code Methoden für die Installation und Deinstallation des Plug-ins, um erforderliche Setup- oder Cleanup-Aktionen durchzuführen.

Ein Plug-in für Versandkosten

Das Ziel des zweiten Plug-ins ist es, die Versandkosten basierend auf dem Gesamtgewicht der im Warenkorb befindlichen Artikel zu berechnen. Dazu ist erneut ein Projekt des Typs Class Library notwendig, das wir dieses Mal WeightBasedShippingPlugin nennen. In diesem Beispiel ist die Schnittstelle IShippingRateComputationMethod zu implementieren, da diese für die Berechnung von Versandkosten zum Einsatz kommt. Wir müssen dabei die Methode GetShippingOptions implementieren. Diese enthält die Logik, um die Versandkosten basierend auf dem Gewicht der Artikel im Warenkorb zu berechnen. In Listing 2 ist der Code des Beispiels zu sehen.
Listing 2: Code für das WeightBasedShippingPlugin
<span class="hljs-keyword">using</span> <span class="hljs-type">Nop</span>.<span class="hljs-type">Core</span>;<br/><span class="hljs-keyword">using</span> <span class="hljs-type">Nop</span>.<span class="hljs-type">Services</span>.<span class="hljs-type">Shipping</span>;<br/><span class="hljs-keyword">using</span> <span class="hljs-type">Nop</span>.<span class="hljs-type">Services</span>.<span class="hljs-type">Shipping</span>.<span class="hljs-type">Tracking</span>;<br/><span class="hljs-keyword">using</span> <span class="hljs-type">Nop</span>.<span class="hljs-type">Services</span>.<span class="hljs-type">Plugins</span>;<br/><span class="hljs-keyword">using</span> <span class="hljs-type">System</span>.<span class="hljs-type">Collections</span>.<span class="hljs-type">Generic</span>;<br/>namespace <span class="hljs-type">WeightBasedShippingPlugin</span><br/>{<br/> public class <span class="hljs-type">WeightBasedShippingComputation</span> : <br/> <span class="hljs-type">IShippingRateComputationMethod</span><br/> {<br/> public decimal <span class="hljs-type">GetRate</span>(decimal weight)<br/> {<br/> // <span class="hljs-type">Beispielhafte</span> <span class="hljs-type">Preisstaffelung</span><br/> <span class="hljs-keyword">if</span> (weight <= <span class="hljs-number">5</span>)<br/> <span class="hljs-keyword">return</span> <span class="hljs-number">5</span>.<span class="hljs-number">00</span>m; // bis <span class="hljs-number">5</span>kg -> <span class="hljs-number">5</span> <span class="hljs-type">Euro</span><br/> <span class="hljs-keyword">if</span> (weight <= <span class="hljs-number">10</span>)<br/> <span class="hljs-keyword">return</span> <span class="hljs-number">7</span>.<span class="hljs-number">50</span>m; // bis <span class="hljs-number">10</span>kg -> <span class="hljs-number">7</span>.<span class="hljs-number">50</span> <span class="hljs-type">Euro</span><br/> <span class="hljs-keyword">return</span> <span class="hljs-number">10</span>.<span class="hljs-number">00</span>m; // über <span class="hljs-number">10</span>kg -> <span class="hljs-number">10</span> <span class="hljs-type">Euro</span><br/> }<br/> public <span class="hljs-type">GetShippingOptionResponse</span> <span class="hljs-type">GetShippingOptions</span>( <br/> <span class="hljs-type">GetShippingOptionRequest</span> request)<br/> {<br/> <span class="hljs-keyword">var</span> response = new <span class="hljs-type">GetShippingOptionResponse</span>();<br/> <span class="hljs-keyword">var</span> totalWeight = <span class="hljs-number">0</span>m;<br/> foreach (<span class="hljs-keyword">var</span> packageItem <span class="hljs-keyword">in</span> request.<span class="hljs-type">Items</span>)<br/> {<br/> totalWeight += packageItem.<span class="hljs-type">GetTotalWeight</span>();<br/> }<br/> <span class="hljs-keyword">var</span> rate = <span class="hljs-type">GetRate</span>(totalWeight);<br/> response.<span class="hljs-type">ShippingOptions</span>.<span class="hljs-type">Add</span>(new <span class="hljs-type">ShippingOption</span><br/> {<br/> <span class="hljs-type">Name</span> = <span class="hljs-string">"Standardversand"</span>,<br/> <span class="hljs-type">Description</span> = <br/> <span class="hljs-string">"Lieferung basierend auf Gesamtgewicht"</span>,<br/> <span class="hljs-type">Rate</span> = rate<br/> });<br/> <span class="hljs-keyword">return</span> response;<br/> }<br/> public <span class="hljs-built_in">void</span> <span class="hljs-type">Install</span>()<br/> {<br/> // <span class="hljs-type">Plugin</span>-<span class="hljs-type">Installationslogik</span> hier<br/> }<br/> public <span class="hljs-built_in">void</span> <span class="hljs-type">Uninstall</span>()<br/> {<br/> // <span class="hljs-type">Plugin</span>-<span class="hljs-type">Deinstallationslogik</span> hier<br/> }<br/> public <span class="hljs-type">IList</span><<span class="hljs-built_in">string</span>> <span class="hljs-type">ValidateShippingForm</span>() => <br/> new <span class="hljs-type">List</span><<span class="hljs-built_in">string</span>>();<br/> public <span class="hljs-built_in">bool</span> <span class="hljs-type">HideShipmentEvents</span> => <span class="hljs-literal">false</span>;<br/> public <span class="hljs-type">Type</span> <span class="hljs-type">GetControllerType</span>() => <br/> typeof(<span class="hljs-type">Controller</span>);<br/> <br/> public <span class="hljs-built_in">void</span> <span class="hljs-type">GetPublicViewComponent</span>(<br/> <span class="hljs-keyword">out</span> <span class="hljs-built_in">string</span> viewComponentName)<br/> {<br/> viewComponentName = <span class="hljs-string">"WeightBasedShipping"</span>;<br/> }<br/> }<br/>} 
Der Code stellt ein Versandkosten-Berechnungs-Plug-in für nopCommerce dar, das auf dem Gewicht basiert. Es implementiert das Interface IShippingRateComputationMethod und definiert verschiedene Methoden, um Versandoptionen bereitzustellen und die Versandkosten entsprechend dem Gesamtgewicht der Artikel im Einkaufswagen zu berechnen. Für verschiedene Gewichtsklassen sind feste Preise festgelegt, beispielsweise kostet der Versand 5 Euro bis zu einem Gewicht von 5 kg. Zusätzliche Funktionen des Plug-ins umfassen die Installation und Deinstallation der Komponente, Validierung der Versandformulare, das Anzeigen von Ver­sand­ereignissen und die Bereitstellung von Komponenten für die Benutzeroberfläche.

Web-API (Plug-in) und Mobile-App

Ein wesentlicher Aspekt von nopCommerce ist seine Flexibilität und Erweiterbarkeit, die auch durch die Nutzung seines Web-API und der Mobile-App unterstützt wird. Das nopCommerce-Web-API ist ein leistungsstarkes Tool, das die Integration von Drittsystemen und die Automatisierung von Geschäftsprozessen ermöglicht. Es basiert auf dem REST-Prinzip, was es leicht zugänglich und benutzerfreundlich macht. Durch das API lassen sich Daten aus einem nopCommerce-Store abrufen und manipulieren, ohne direkt auf die Datenbank oder das Backend-System zugreifen zu müssen. Dies öffnet die Tür für eine Vielzahl von Anwendungen, wie etwa die Integration mit CRM-Systemen, Buchhaltungssoftware, ERP-Systemen und anderen E-Commerce-Plattformen.Das Web-API von nopCommerce unterstützt zahlreiche Endpunkte, die die Verwaltung verschiedener Aspekte eines E-Commerce-Geschäfts ermöglichen, einschließlich Produkte, Kunden, Bestellungen, Kataloge und vieles mehr. Entwickler können beispielsweise Produkte hinzufügen, aktualisieren oder löschen, Bestellinformationen abrufen oder Kundenprofile verwalten. Dies bietet eine enorme Flexibilität und macht das Web-API zu einem unverzichtbaren Werkzeug für Unternehmen, die ihre Prozesse optimieren und ihre Reichweite erweitern möchten.Neben dem Web-API bietet nopCommerce auch eine Mobile-App, die es den Shop-Besitzern ermöglicht, ihren Online-Shop über mobile Geräte zu verwalten. Die Mobile-App ist sowohl für Android als auch für iOS verfügbar und bietet eine benutzerfreundliche Oberfläche, die auf die Bedürfnisse von E-Commerce-Shop-Managern zugeschnitten ist.Mit der Mobile-App können Benutzer auf wichtige Shop-Informationen zugreifen, Bestellungen verwalten, Produkt­informationen aktualisieren und Kundeninteraktionen überwachen. Diese Möglichkeit, den Shop unterwegs zu verwalten, ist besonders wertvoll für Kleinunternehmer und solche, die ständig in Bewegung sind. Die App sorgt auch für eine direkte Verbindung zum Shop-Backend, was schnelle Updates und Reaktionen auf Kundenanforderungen ermöglicht.

Vorteile von nopCommerce

Einer der Hauptvorteile von nopCommerce ist die problemlose Integration mit bestehenden Systemen. Dank seiner robusten Architektur auf Basis von .NET Core lässt sich nopCommerce mit einer Vielzahl von externen Systemen und Anwendungen verbinden. Dies umfasst alles von Zahlungsgateways über Versandanbieter bis hin zu CRM- und ERP-Systemen. Die Integration erfolgt über gut dokumentierte APIs und eine breite Palette von verfügbaren Plug-ins, die den Aufwand und die Komplexität der Entwicklung erheblich reduzieren.Ein wesentlicher Vorteil von nopCommerce aus Unternehmenssicht ist die sehr gute Skalierbarkeit. Die Plattform ist für hohe Leistung und große Datenmengen ausgelegt. Die Nutzung von ASP.NET Core ermöglicht es der Plattform, effizient auf einer Vielzahl von Hardware- und Cloud-Umgebungen zu laufen. Dies bedeutet, dass nopCommerce sowohl für kleine Start-ups als auch für große Unternehmen geeignet ist, die eine robuste E-Commerce-Lösung benötigen. Die Architektur von nopCommerce unterstützt dabei effektives Caching, Datenbank-Sharding und die Verwendung von Load-Balancern, um die Last effizient zu verteilen und die Geschwindigkeit und Reaktionsfähigkeit der Plattform zu maximieren. Diese Funktionen sind entscheidend für den Betrieb in Peak-Verkaufsperioden, wenn die Zugriffszahlen sprunghaft ansteigen.Die Einhaltung von PCI-DSS-Standards [11] – die Abkürzung bedeutet Payment Card Industry Data Security Standard – ist ebenfalls ein wichtiger Faktor, der nopCommerce für E-Commerce-Unternehmen, die Kartenzahlungen verarbeiten, sicher macht. Die Plattform sorgt dafür, dass alle Zahlungsinformationen sicher behandelt werden, und reduziert das Risiko von Sicherheitsverletzungen, was sowohl für Kunden als auch für Unternehmen von großer Bedeutung ist.Zusammenfassend bietet nopCommerce sowohl Entwicklern als auch Unternehmen eine Reihe von Vorteilen. Für Entwickler ist die einfache Integration mit bestehenden Systemen und die Nutzung bekannter .NET-Praktiken ein klarer Gewinn, während Unternehmen von der hohen Skalierbarkeit und den ausgezeichneten Sicherheitsmerkmalen profitieren.

Vergleich mit anderen Plattformen

Neben nopCommerce existiert eine Vielzahl von Plattformen, die jeweils unterschiedliche Bedürfnisse und Anforderungen erfüllen. nopCommerce, Magento, Shopify und WooCommerce sind vier populäre Lösungen, die jeweils ihre eigenen Stärken und Schwächen aufweisen.nopCommerce und Magento bieten beide ein hohes Maß an Flexibilität und Anpassbarkeit. Während nopCommerce durch seine Open-Source-Natur und die Nutzung von .NET Core insbesondere für Entwickler, die mit Microsoft-Technologien vertraut sind, interessant ist, bietet Magento eine breite Unterstützung für PHP, was es in der breiten PHP-Community beliebt macht. Beide Plattformen verfügen über eine robuste Architektur, die es ermöglicht, komplexe und maßgeschneiderte E-Commerce-Anwendungen zu entwickeln.Magento ist bekannt für seine hohe Leistungsfähigkeit, erfordert jedoch oft spezielle Hosting-Lösungen und eine sorgfältige Optimierung, insbesondere bei umfangreicheren Shops. nopCommerce bietet ebenfalls eine gute Skalierbarkeit und Leistung, hat jedoch den Vorteil, dass es effizient auf weniger leistungsfähigen Servern oder in Cloud-Umgebungen betrieben werden kann – dank seiner effizienten Codebasis und der Unterstützung von ASP.NET Core.nopCommerce ist kostenlos und Open-Source, was es für Start-ups und kleine Unternehmen attraktiv macht. Magento bietet eine kostenlose Community-Version und eine kostenpflichtige Enterprise-Version, die zusätzliche Features und Support bietet. Die Entscheidung zwischen diesen beiden Optionen hängt oft vom Budget und den spezifischen Anforderungen ab.Shopify dagegen ist bekannt für seine Benutzerfreundlichkeit und wird oft von Nichtentwicklern bevorzugt, die schnell einen Online-Shop einrichten möchten. Es bietet eine breite Palette von Vorlagen und eine intuitive Benutzeroberfläche. Im Gegensatz dazu erfordert nopCommerce mehr technisches Know-how, insbesondere im Umgang mit .NET und grundlegenden Webentwicklungsfähigkeiten.Shopify arbeitet mit einem Abonnementmodell, das monatliche Gebühren einschließt und mit zunehmender Anzahl von Funktionen und Produkten teurer wird. nopCommerce erfordert keine laufenden Lizenzgebühren, was es für langfristige Projekte kosteneffizient macht, jedoch können die Kosten für Hosting und mögliche Anpassungen ins Gewicht fallen.Beide Plattformen stellen starke E-Commerce-Funktionen einschließlich Multichannel-Vertrieb und umfassende Analysetools bereit. Shopify bietet jedoch eine größere Anzahl an sofort verfügbaren Integrationen und eine stärkere Fokussierung auf Marketing-Tools und -Dienstleistungen.WooCommerce ist eine E-Commerce-Erweiterung für das CMS WordPress, was es zur bevorzugten Wahl für bestehende WordPress-Nutzer macht. Die Integration in das weltweit führende Content-Management-System bietet eine nahtlose Benutzererfahrung und Zugang zu einer riesigen Auswahl an Plug-ins und Themes.Wie nopCommerce ist auch WooCommerce vollständig anpassbar, wobei nopCommerce eine stärkere Trennung zwischen Kernfunktionalitäten und Erweiterbarkeit durch Plug-ins bietet. nopCommerce könnte in Umgebungen, in denen eine strikte Trennung von Geschäftslogik und Präsentationsschicht erforderlich ist, Vorteile bieten.WooCommerce selbst ist kostenlos, benötigt jedoch ein WordPress-Hosting und kann bei der Nutzung vieler Erweiterungen und spezieller Anpassungen ebenfalls kostspielig werden. nopCommerce bietet den Vorteil einer kostenlosen Plattform ohne die Notwendigkeit von Abonnementgebühren, was zu geringeren langfristigen Kosten führen kann.

Fazit

nopCommerce ist eine leistungsstarke und vielseitige E-Commerce-Plattform. Sie bietet eine umfassende, anpassbare und skalierbare Lösung für Online-Shops. Als Open-Source-Plattform auf Basis von .NET bildet nopCommerce zudem eine robuste und zuverlässige Basis, die mit einer großen Auswahl an Funktionalitäten und Erweiterungsmöglichkeiten durch Plug-ins und APIs ausgestattet ist.Die Umsetzung der Plattform erscheint robust, die Features sind zahlreich und für .NET-Liebhaber ist nopCommerce sicherlich ein Paradies. Da es viele Umsetzungen, Showcases und Installationen des Projekts gibt, hat es sich ganz offensichtlich auch in der Praxis bewährt: Mit nopCommerce lassen sich reale Shops umsetzen, abseits von Demos und Beispielen.Ob nopCommerce dabei besser ist als andere Vertreter wie zum Beispiel WooCommerce, das ebenfalls recht viele Installationen aufweisen kann, lässt sich in einem Artikel schwer beantworten. Dafür sind ein tieferer Blick und ein längerer Test notwendig. Das Projekt verdient sich aber allemal ein „Sehr gut“ inklusive einer Empfehlung, einen Blick auf nopCommerce zu werfen.

Fussnoten

  1. [1] Repository von nopCommerce auf GitHub, http://www.dotnetpro.de/SL2408Frameworks1
  2. [2] Organisation nopSolutions auf GitHub, https://github.com/nopSolutions
  3. [3] Informationen zur Lizenz GNU AGPL v3.0, https://opensource.org/license/agpl-v3
  4. [4] LinkedIn-Profil des nopCommerce-Gründers Andrei Mazulnitsyn, http://www.dotnetpro.de/SL2408Frameworks2
  5. [5] Dokumentation zu Fluent Validation, http://www.dotnetpro.de/SL2408Frameworks3
  6. [6] Projektseite zu Automapper, https://automapper.org
  7. [7] Dokumentation zu Entity Framework Core bei Micro­soft, http://www.dotnetpro.de/SL2408Frameworks4
  8. [8] Liste von Partnern auf der Website von nopCommerce, http://www.dotnetpro.de/SL2408Frameworks5
  9. [9] Hoster WinHost mit seinem nopCommerce-Angebot, http://www.dotnetpro.de/SL2408Frameworks6
  10. Cloud-Anbieter Everleap Managed Services mit seinem nopCommerce-Angebot, http://www.dotnetpro.de/SL2408Frameworks7
  11. PCI-DSS-Standard bei Wikipedia, http://www.dotnetpro.de/SL2408Frameworks8

Neueste Beiträge

DWX hakt nach: Wie stellt man Daten besonders lesbar dar?
Dass das Design von Websites maßgeblich für die Lesbarkeit der Inhalte verantwortlich ist, ist klar. Das gleiche gilt aber auch für die Aufbereitung von Daten für Berichte. Worauf besonders zu achten ist, erklären Dr. Ina Humpert und Dr. Julia Norget.
3 Minuten
27. Jun 2025
DWX hakt nach: Wie gestaltet man intuitive User Experiences?
DWX hakt nach: Wie gestaltet man intuitive User Experiences? Intuitive Bedienbarkeit klingt gut – doch wie gelingt sie in der Praxis? UX-Expertin Vicky Pirker verrät auf der Developer Week, worauf es wirklich ankommt. Hier gibt sie vorab einen Einblick in ihre Session.
4 Minuten
27. Jun 2025
„Sieh die KI als Juniorentwickler“
CTO Christian Weyer fühlt sich jung wie schon lange nicht mehr. Woran das liegt und warum er keine Angst um seinen Job hat, erzählt er im dotnetpro-Interview.
15 Minuten
27. Jun 2025
Miscellaneous

Das könnte Dich auch interessieren

UIs für Linux - Bedienoberflächen entwickeln mithilfe von C#, .NET und Avalonia
Es gibt viele UI-Frameworks für .NET, doch nur sehr wenige davon unterstützen Linux. Avalonia schafft als etabliertes Open-Source-Projekt Abhilfe.
16 Minuten
16. Jun 2025
Mythos Motivation - Teamentwicklung
Entwickler bringen Arbeitsfreude und Engagement meist schon von Haus aus mit. Diesen inneren Antrieb zu erhalten sollte für Führungskräfte im Fokus stehen.
13 Minuten
19. Jan 2017
Evolutionäres Prototyping von Business-Apps - Low Code/No Code und KI mit Power Apps
Microsoft baut Power Apps zunehmend mit Features aus, um die Low-Code-/No-Code-Welt mit der KI und der professionellen Programmierung zu verbinden.
19 Minuten
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige