Die erste überlegung ist, ob diese Attribute des Verifizierungscodes festgelegt werden k?nnen (das hei?t, ob sie in eine Klasse gekapselt und dann durch Offenlegung ?ffentlicher Attribute und Methoden verwendet werden oder ob die Verifizierung direkt im allgemeinen Handler implementiert wird). Das Ergebnis ist leider das letztere... Der darin enthaltene Algorithmus fühlt sich ziemlich gut an, zumindest für jemanden wie mich, der sich kaum mit Algorithmen auskennt, also dachte ich darüber nach, ihn zu kapseln. Sie hat ihn dann schamlos in ihre eigene Klassenbibliothek integriert ^^
Analysieren Sie zun?chst die M?ngel in diesem Code (was sie denkt):
1. Für die prozedurale Programmierung, wenn Sie die Eigenschaften des Best?tigungscodes ?ndern m?chten, z. B. die ?nderung der Schriftgr??e, der Hintergrundfarbe usw Details müssen Sie den relevanten Code im allgemeinen Verarbeitungsprogramm finden und ?ndern. Dieser Code ist jedoch besser. Er trennt die Generierung der Best?tigungscodezeichenfolge und die Bildgenerierung in verschiedene Methoden, sodass die zu ?ndernden Stellen leichter gefunden werden k?nnen.
2. Wenn ich diese Funktion an anderen Stellen anwenden m?chte, beispielsweise in einem Winform-Programm, kann dieser Code nicht in Form einer Komponente (einer DLL) wiederverwendet, sondern kopiert, eingefügt und ge?ndert werden ...
3. Ich habe nicht festgestellt, dass der Best?tigungscode nach der Generierung gespeichert wurde (- -!)
Natürlich sind die sogenannten M?ngel relativ, das hei?t, wenn Sie Zeit dafür haben Denken Sie darüber nach und entwerfen Sie dann langsam eine Verifizierungscode-Klasse. Sie kann auf jeden Fall eine relativ gute Klasse sein, aber wenn Sie an einem Projekt arbeiten und das Projekt dringend ist, ist ein solcher Code tats?chlich leistungsf?higer. Die orientierte Entwurfsmustercode-Entkopplung ist nur eine Wolke ~~~
Der n?chste Schritt ist meine Modifikation dieses Codes. Zuerst bestimme ich, welchen Effekt ich m?chte, das hei?t, wie ich ihn verwenden m?chte, nachdem ich ihn gekapselt habe. Zun?chst hoffe ich, dass ich bei der Verwendung nur eine neue Verifizierungscode-Instanz erstellen muss (bei Bedarf kann ich verschiedene Attribute des Verifizierungscodes beliebig festlegen) und dann bestimmte Methoden dieser Instanz aufrufen kann, um Zeichenfolgen zu verwenden , Streams, Bitmap-Objekte bzw. Byte. Erhalten Sie diesen Verifizierungscode in Form eines Arrays (beachten Sie, dass diese Verifizierungscode-Klasse nicht die Funktion zum Speichern des Verifizierungscodes im Kontext enth?lt. Ich pers?nlich bin der Meinung, dass dies das Generieren des Verifizierungscodes ist und das Speichern des Verifizierungscodes im Kontext sind zwei verschiedene Funktionen. Es ist nicht erforderlich, diese Funktion in der Verifizierungscode-Klasse hinzuzufügen. In diesem Fall wird der Code im allgemeinen Verarbeitungsprogramm ?u?erst einfach. Erstellen Sie zun?chst einfach einen Best?tigungscode mit new, rufen Sie dann die Methode auf, um den Best?tigungscode in Form einer Zeichenfolge zu erhalten, und speichern Sie ihn dann morgens und nachmittags . Ob es in der Sitzung oder im Cookie vorhanden ist Es kommt nach Bedarf, und die Verifizierungscode-Klasse kümmert sich nicht darum, dann ruft sie eine andere Methode auf, um den Verifizierungscode in Form eines Byte-Arrays zu erhalten, damit das Bild über die Methode context.Response.BinaryWrite() ausgegeben werden, d. h. Das allgemeine Verarbeitungsprogramm enth?lt nur drei Codezeilen. Der aufrufende Code lautet ungef?hr wie folgt:
/// <summary> /// 獲取驗證碼(一般處理程序入口函數(shù)) /// </summary> /// <param name="context">當前上下文</param> public void ProcessRequest(HttpContext context) { // 創(chuàng)建驗證碼 ValidateCode validateCode = new ValidateCode(); // 獲取驗證碼(字符串),寫入Session context.Session["SomeValidateCode"] = validateCode.GetString(); // 輸出驗證碼(圖片) context.Response.BinaryWrite(validateCode.GetByteArray()); }
PS: Ich erinnere mich, dass der Code zu Beginn meiner Arbeit sehr schlecht geschrieben war (schlechter als jetzt, als ich ihn direkt verwendete). Ich habe nie darüber nachgedacht, den Code zu ?ndern oder zu kapseln, das hat mir mein Meister damals beigebracht und ich war sehr beeindruckt. Ich pers?nlich bin der Meinung, dass es nichts Falsches ist, den Code anderer Leute zu verwenden, um zumindest die Benutzerfreundlichkeit des Codes zu beweisen. Darüber hinaus sind einige Dinge nicht so gut, wie andere denken Wenn Sie sie nutzen m?chten, dürfen Sie den Code anderer Personen nicht blind verwenden. Nehmen Sie am besten die erforderlichen ?nderungen oder Kapselungen entsprechend Ihrer tats?chlichen Situation vor, auch wenn es sich nur um eine einfache Ebene handelt. Wenn das Projekt dringend ist, ist es natürlich Zeitverschwendung. Kurz gesagt, denken Sie nicht darüber nach, verwenden Sie es, sobald Sie es erhalten, und stellen Sie zumindest den Schlüsselcode oder die Gesamtstruktur sicher Der Code ist klar.
Weitere Artikel zum Thema gekapselter asp.net-Best?tigungscode finden Sie auf der chinesischen PHP-Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Customattributes sind Mechanismen, die in C# zum Anbringen von Metadaten an Codeelemente verwendet werden. Seine Kernfunktion besteht darin, das System zu erben. 2. Beim Erstellen müssen Sie eine aus Attribut geerbte Klasse definieren und Attributeusage verwenden, um das Anwendungsziel anzugeben. 3. Nach der Anwendung k?nnen Sie Funktionsinformationen durch Reflexion erhalten, z. B. die Verwendung von Attribut.getCustomatTribute ();

Der Kern der Gestaltung unver?nderlicher Objekte und Datenstrukturen in C# besteht darin, sicherzustellen, dass der Zustand des Objekts nach der Erstellung nicht ge?ndert wird, wodurch die Sicherheit der Threads verbessert und Fehler verringert wird, die durch Zustands?nderungen verursacht werden. 1. Verwenden Sie Readonly Felder und kooperieren Sie mit der Konstruktorinitialisierung, um sicherzustellen, dass die Felder nur w?hrend der Konstruktion zugewiesen werden, wie in der Personklasse gezeigt. 2.. Verwenden Sie den Sammelart und verwenden Sie unver?nderliche Sammelschnittstellen wie ReadonlyCollection oder ImmutableList, um die externe Modifikation interner Sammlungen zu verhindern. 3.. Verwenden Sie den Datensatz, um die Definition des unver?nderlichen Modells zu vereinfachen und standardm??ig schreibgeschützte Attribute und Konstruktoren zu generieren, die für die Datenmodellierung geeignet sind. V.

Bei der Verarbeitung gro?er Datenmengen kann C# durch Streaming, parallele asynchrone und geeignete Datenstrukturen effizient sein. 1. Verwenden Sie die Streaming -Verarbeitung, um einzeln oder in Stapeln wie StreamReader oder Efcores asasyncenumerable zu lesen, um Speicherüberlauf zu vermeiden. 2. Verwenden Sie parallel (parallel.foreach/plinq) und asynchron (asynchron/wartet auf Task.run), um die Anzahl der Parallelit?t zu steuern und auf die Sicherheit der Threads zu achten. A. W?hlen Sie effiziente Datenstrukturen (wie W?rterbuch, Hashset) und Serialisierungsbibliotheken (wie System.Text.json, MessagePack), um die Suchzeit und die Serialisierungsaufwand zu verkürzen.

Reflexion ist eine Funktion in C# für die dynamische Analyse und ?nderung von Programmstrukturen zur Laufzeit. Zu den Kernfunktionen geh?ren das Erhalten von Typinformationen, das Erstellen von Objekten, das Aufrufen von Methoden und das überprüfen der Assemblierung. Zu den gemeinsamen Anwendungsszenarien geh?ren: 1. Binden Sie das Datenmodell automatisch, z. B. die Zuordnung von W?rterbuchdaten an Klasseninstanzen; 2. Implementieren Sie das Plug-in-System, laden externe DLLs und rufen Sie seine Schnittstelle an. 3. Unterstützung automatisierter Tests und Protokollierung, z. B. die Ausführung bestimmter Feature -Methoden oder automatisch Aufzeichnung von Protokollen. Wenn Sie es verwenden, müssen Sie auf die Leistungsaufwand, die Korruption und Schwierigkeiten des Debuggens berücksichtigen. Zu den Optimierungsmethoden geh?ren das Caching -Typinformationen, die Verwendung von Delegierten zur Verbesserung der Anrufeffizienz und das Generieren von IL -Code. Die rationale Verwendung von Reflexion kann die Flexibilit?t und Vielseitigkeit des Systems verbessern.

Der Schlüssel zum Schreiben von C# Code ist die Wartbarkeit und Testbarkeit. Verantwortungsbewusst aufteilen, das Prinzip der einzigen Verantwortung (SRP) befolgen und Datenzugriff, Gesch?ftslogik und Anfrage nach Repository, Service und Controller anwenden, um die strukturelle Klarheit und die Testen der Effizienz zu verbessern. Mehrzweck-Schnittstelle und Abh?ngigkeitsinjektion (DI) erleichtern die Ersatzimplementierung, die Erweiterung von Funktionen und Simulationstests. Unit -Tests sollten externe Abh?ngigkeiten isolieren und Scheinwerkzeuge verwenden, um die Logik zu überprüfen, um eine schnelle und stabile Ausführung zu gew?hrleisten. Standardisieren Sie die Benennung und Aufteilung kleiner Funktionen, um die Lesbarkeit und Wartungseffizienz zu verbessern. Wenn Sie sich an die Prinzipien der klaren Struktur, klare Verantwortlichkeiten und testfreundliche Grunds?tze halten, k?nnen die Entwicklungseffizienz und die Codequalit?t erheblich verbessern.

Erstellen Sie benutzerdefinierte Middleware in ASP.NetCore, das durch Schreiben von Klassen und Registrierung implementiert werden kann. 1. Erstellen Sie eine Klasse, die die Invokeasync -Methode enth?lt, httpcontext und RequestDelegateNext behandeln. 2. Registrieren Sie sich bei Usemiddleware in Program.cs. Middleware eignet sich für allgemeine Vorg?nge wie Protokollierung, Leistungsüberwachung, Ausnahmebehandlung usw. Im Gegensatz zu MVC -Filtern wirkt sie auf die gesamte Anwendung und stützt sich nicht auf den Controller. Die rationale Verwendung von Middleware kann die strukturelle Flexibilit?t verbessern, sollte jedoch die Leistung beeintr?chtigen.

Generische Einschr?nkungen werden verwendet, um die Typparameter einzuschr?nken, um spezifische Verhaltens- oder Vererbungsbeziehungen sicherzustellen, w?hrend die Kovariation Subtyp -Konvertierung erm?glicht. Zum Beispiel stellt Icomparable sicher, dass T vergleichbar ist; Kovariation wie IEnumerable erm?glicht es, dass Ienumerable in iEnumerable umgewandelt wird, aber nur gelesen wird und kann nicht ge?ndert werden. Gemeinsame Einschr?nkungen umfassen Klasse, Struktur, New (), Basisklasse und Schnittstelle, und mehrere Einschr?nkungen werden durch Kommas getrennt; Die Kovariation erfordert das Out -Keyword und gilt nur für Schnittstellen und Delegierte, was sich vom Wechselrichter unterscheidet (in Schlüsselwort). Beachten Sie, dass die Kovarianz keine Klassen unterstützt, nicht nach Belieben konvertiert werden kann und Einschr?nkungen die Flexibilit?t beeinflussen k?nnen.

Die folgenden Punkte sollten bei der Verwendung von LINQ: 1 befolgt werden. Bei Verwendung deklarativer Datenoperationen wie Filterung, Konvertierung oder Aggregation von Daten werden die Priorit?t vorliegt, um die Zwangsbenutzung in Szenarien mit Nebenwirkungen oder leistungskritischen Szenarien zu vermeiden. 2. Verstehen Sie die Merkmale der verz?gerten Ausführung, die ?nderungen des Quellsatzsatzes k?nnen zu unerwarteten Ergebnissen führen, und Verz?gerungen oder Ausführungen sollten gem?? den Anforderungen ausgew?hlt werden. 3. Achten Sie auf Leistung und Speicheraufwand, Kettenaufrufe k?nnen Zwischenobjekte erzeugen, und leistungsempfindliche Codes k?nnen durch Schleifen oder Spannweiten ersetzt werden. 4. Halten Sie die Abfrage pr?zise und leicht zu lesen und teilen Sie die komplexe Logik in mehrere Schritte auf, um überm??ige Verschachtelung und Mischen mehrerer Vorg?nge zu vermeiden.
