Zusätzlich kann es viele objektive und subjektive Gründe haben, warum sich eine Person (nicht (*)) auf eine Stelle bewirbt oder Unternehmen eine Stelle (konsequent) unbesetzt lassen (letzteres kann Sinn haben, wenn eine Fehlbesetzung effektiv mehr Ärger macht als ein Freilassen)
(*)die verwendeten Technologien und Vorgehensweisen könn(t)en zu alt oder zu wenig verbreitet sein. Falls Veränderungsdruck besteht, könnte der Zug anderweitig abgefahren sein...
Wenn man den (längerfristigen) Nutzen diverser Vorgehensweisen nicht erläutert bekommt, kann das sogar stimmen...
Code-Konventionen erleichtern das Schreiben oder Lesen eigenen oder fremden Codes
Namespaces wurden schon erläutert (Zusatz: Eigenrecherche "C/C++ diamond problem")
Klassen diesen zum Herstellen von Zusammenhängen von (strengbetrachtet irgendwelchen) Daten und Methoden (Quelle: YT, thenativeweb - "Warum OOP (objektorientierte Programmierung) überbewertet ist")
Hierbei könnte man die Teile der Software mit keinem oder geringem Änderungs-/Erweiterungsbedarf in einer Datei (z.B. dll) zusammenfassen und die restlichen Teile jeweils separat auslagern (dll, Interfaces, Module,...)
Einfacher Grundsatz: man fügt die sich nicht (oder kaum) ändernden Teile der Software zusammen, sich schneller ändernde Teile werden ausgelagert (z.B. durch Interfaces). Und DIE Architektur gibt es nicht, siehe auch die Videos unter Folgen chronologisch (z.B. 111, 109, 92). Und was Englisch betrifft höre man die Ausführungen eines ehemaligen mycsharp-Mitglieds: YT - thenativeweb, "Programmieren auf Deutsch?!"
Zusätzlich kann man beim Verwenden mehrerer abstrakter Klassen auf das sogenannte "diamond problem" stossen (Java oder C# erlauben deswegen 'nur' einfache Vererbung). Interfaces machen effektiv Sinn, wenn man häufig(er) Änderungen oder Erweiterungen (z.B. bei der Menge an zu verwendenden Datenbanken oder deren Abfrageoperationen) implementieren und nutzen muss.
Man identifizert im Vorab die Teile der Software, die kaum (oder selten) geändert werden und fügt diese zusammen. Teile mit höherer Änderungsrate werden ausgelagert oder abstrahiert, z.B. durch Interfaces
Weiterhin hat der Verweis auf die Drei-Schichten-Architektur einen tieferen Sinn: damit können (häufige) Änderungen / Erweiterungen an der Software nur an einer (zentralen) Stelle im Code vorgenommen werden (immerhin *könnten* weitere DB'en ins Spiel kommen, an der Verarbeitungslogik könnten Änderungen nötig werden, andere UI's wollen benutzt werden,...)
(teilweise offtopic) Der gezeigte Quellcode funktioniert auch ohne Umwege über z.B. PowerShell oder zusätzliche (ältere) Befehle, siehe Anhang.
Im Gegensatz zu Java nimmt .NET aber nicht unbedingt auf Plattformkompatibilität Rücksicht. Es kann also passieren, dass man auf Codes oder Vorgehensweisen trifft, die damals möglich (wenn auch nicht zwingend sinnvoll) waren. Aber diese sind angesichts neuerer Änderungen, Entwicklungen, Erweiterungen,... obsolet (geworden), bekanntere Beispiele sind "(Un)Boxing" vs. "Generics" oder der neue(re) Umgang mit Zeiten.
Zus. zu 1.): im konkreten Fall braucht man @ nicht, aber längerfristig ist es die solidere Entscheidung
2.) das "t" fehlt absichtlich: VS starten, WinForms-Projekt anlegen, Program.cs öffnen, gegebenen Quellcode kopieren, "Debug" und "Any CPU" belassen, alles speichern, Run-Button. Und kurz danach auf der Kommadozeile mit geöffnetem (oder geschlossenem) Chromebrowser experimentieren (<- evtl. waren andere Vorgehensweisen geplant)
Zwecks Orientierung:
- Code-Konventionen machen Sinn um sich überhaupt im (fremden) Quellcode zurechtzufinden
- die Aufteilung in Schichten macht (effektiv) Sinn, wenn das Programm (häufig) geändert oder erweitert werden soll: dann hat man die Änderung/Erweiterung (im Idealfall) an einer (zentralen) Stelle
- SQL-Parameter machen Sinn, wenn irgendein(e) Endnutzer(in) irgendwelche Daten in eine Ziel-Datenbank eintragen darf/soll/muss: damit können kritische Einträge (oder Befehle) verhindert werden
- SW-Architektur: man fügt die die sich nicht (oder selten) ändernden Teile der Software zusammen, sich schnell(er) ändernde Teile werden ausgelagert
...im Endeffekt sind das aber "nur" Empfehlungen und man kann das Zielprogramm nach eigenen Vorstellungen konstruieren.
Parallel kann man sich eine andere IDE ansehen (neben VS (Code)): replit.com. Vorteil: kostenfrei (zumindest in der Standardversion), erlaubt einfacheres Code-Teilen via URL (statt Screenshots, Beschreibungen, Code-Tags,...), hat Templates z.B. für C++ (verwendet CLang++ 7 i.V. mit C++ 17) , bedarf keiner Konfiguration via json
Für Code sollte man die Code-Tags verwenden. Damit könnte man das Zielprogramm einfacher selbst nachstellen. Und welcher C/C++ - Compiler wird verwendet ?
Das Grundsatzprinzip der Drei-Schichten-Architektur gilt auch mit ASP.NET Core (der längerfristige Vorteil wird klar, wenn eine Änderung oder Erweiterung der Zielsoftware nur an einer (zentralen) Stelle erfolgt) und wird vermutlich vom Framework und den Templates auch so vorgegeben. Die restlichen Dateien könnten Konfigurationsinformationen (z.B. "Glue-Code") oder andere Vorgaben enthalten: [Tutorial] Konfigurationsmodell im .NET Framework. Und für Frontendprogrammierung soll VS Code die schankere (und bessere) Option darstellen.
Kurzgefasst sollte man die Teile der Software, die sich selten (oder gar nicht) ändern, zusammenfügen und die sich schneller ändernden Teile auslagern (Stichworte z.B.: Modulithen, Macroservices, Microservices). Beim konkreten Projekt könnte man die 'alten' Ideen als Vorlage für ein neues Produkt verwenden (unter Benutzung einer Architektur...)
Das Maximum eines Arrays kann man Linq i.V. mit Max (<- keine Anfängervorgehensweise, der zugehörige Algorithmus soll wohl selbst implementiert werden) ermitteln: https://www.dotnetperls.com/max
Teil II : Testprogramm unter Windows10 mit .NET 4.8x kompiliert und auf einem Windows7-Testrechner mit .NET 4.8x sowie Nur-Nutzer-Rechten und einem beschreibbaren und mit Testdateien gefülltem Verzeichnis ausgeführt. Grundsätzlich funktioniert es jedenfalls, siehe Anhänge.
Neben den fachlichen Qualifikationen und interessierten Personenkreisen wollen wohl weitere objektive/subjektive Punkte beachtet werden, Eigenrecherche youtube.com @ "6+1 Tipps für gute Softwareentwickler"
Eigenrecherche "T-SQL last query": auf dieser Ebene gibt es durchaus verschiedene Optionen. Im Vorab könnte man aber ein sog. "Prepared Statement" definieren und eben nur dieses via C# aufrufen.
Weiterhin könnte man sich die YT-Kanäle zweier (ehemals) aktiver mycsharp.de-Nutzer betrachten: TheNativeWeb sowie David Tielke (Stichwort auch "FaaS")
VS Comm. '19, neues Projekt, Template zum Anlegen einer WPF-App (egal ob mit ohne .NET Core). Oben rechts beim Menüpunkt Fenster *könnte* das Verhalten hinter "Verankerung aufheben" oder "Alle abdocken" bereits standardmässig aktiv sein. Am einfachsten geht man über das VS-Icon in der Statusleiste, dann auf das des Zielfensters. Schliessen und die Zieldatei im Projektmappen-Explorer neu öffnen.
Und nebenbei sollte man erst die passenden Grundlagen kennen, bevor man an GUI-Programmierung herangeht.
Front-End in JavaScript geschrieben sein muss, stimmt das eigentlich (noch) ?!
Ob es ein Muss ist, sei dahingestellt. Auf jeden Fall gibt es neuere Ansätze, z.B. TypeScript (typisiertes JavaScript), Angular, Vue.JS, Aurelia, React (bekanntere JS-Frameworks)