Laden...

Grundfragen zu C# SW-Architektur -> SQL-System / Winform - WPF

Erstellt von Everwell vor 5 Jahren Letzter Beitrag vor 5 Jahren 3.167 Views
E
Everwell Themenstarter:in
8 Beiträge seit 2018
vor 5 Jahren
Grundfragen zu C# SW-Architektur -> SQL-System / Winform - WPF

Hallo zusammen

Ich bin ganz neu hier und möchte erstmal alle begrüssen. 🙂

Da ich nun mal ein paar Bücher durchgelesen habe möchte ich mich an mein erstes Projekt
ran um von der Theorie in die Praxis zu kommen. Dazu habe ich mich für einen
Client für meinen Arbeitsplatz entschieden, mit den Ideen kommt auch die Motivation. 🙂

Nun stellt sich im Thema SQL die Frage, welches System mit C# als FE am besten eignet (Nach Erfahrung) mit den folgenden Vorraussetzungen (MySQL, PostgreSQL, MariaDB..., es gibt so unglaublich viele):

  • Kostenlose Nutzung (Hinweis, der Client wird nur innerhalb in der Firma genutzt und nicht kommerziell vertrieben)
  • Leider nicht MS SQL wegen den Beschränkungen (ich weiss...)
  • Schnelle Zugriffszeiten (extrem wichtig)
  • Guter Connector und gut integriert
  • Gute Community falls Fragen anstehen
  • Zukunftsicher

Habt ihr dazu gerade eine Empfehlung? 🙂

Zur FE habe ich einfach eine Verständnis-Frage. Bin ich richtig in der Annahme, dass WPF für die Zukunft sicherer und für mich besser geeignet ist - falls sich eine neue Technologie durchsetzt? Bei uns wird es wohl noch 5-6 Jahre gehen, bis wir komplett auf Win10 sind.

Für jegliche Infos, Ratschläge, Links, News um mein Newbie dasein zu erleichtern bin ich sehr froh und glücklich.

Vielen Dank für eure Bemühungen. 🙂

Grüsse
Everwell

1.040 Beiträge seit 2007
vor 5 Jahren

Für was steht die Abkürzung FE? 🤔

A
764 Beiträge seit 2007
vor 5 Jahren

Hallo Everwell

Bist du dir sicher, dass du SQL brauchst?
Für den Anfang könntest du das auch weglassen.

Dito!

709 Beiträge seit 2008
vor 5 Jahren

Ich würde auf "Frontend" tippen.

E
Everwell Themenstarter:in
8 Beiträge seit 2018
vor 5 Jahren

Hallo zusammen

Vielen Dank für eure Antworten.

Ja einen SQL-Server werde ich schon brauchen da ich auch Multiuserzugriffe brauche. 😃
Ich weiss für den Anfang wäre ein kleineres Projekt sinnvoller, aber ich steige da lieber gleich komplett rein. 😃

Ups FE = Frontend, BE = Backend, habe ich so mal vor Urzeiten gelernt - ist wohl nicht mehr zeitgemäss. ^^

Gruss
Everwell

16.834 Beiträge seit 2008
vor 5 Jahren

Was heisst Multi User Zugriffe?
Du solltest Clients niemals direkt auf die DB lassen. a) Sicherheitsproblem b) sehr starke Abhängigkeit.

  • mySQL ist kein reines kostenloses Datenbanksystem für den kommerziellen Einsatz, es kann sein, dass eine Commercial License notwendig ist (siehe Lizenzbedingungen)
  • MSSQL hingegen ist in der Expression Version auch für den kommerziellen Einsatz kostenlos (siehe Lizenzbedingungen)
  • unter "schnelle Zugriffszeiten" versteht jeder was anderes; ungenaue Anforderungen sind ungültige Anforderungen
  • gleiches Spiel mit guter Connector, was ist gut?

Allgemein würde ich Fatclients nicht mehr als Zukunftssicher betrachten.
Da wir aber Deine Zielgruppe nicht kennen, können wir dazu auch nichts sagen.

Insgesamt sind Deine Anforderungen leider wirklich sehr schwammig 😉

T
2.224 Beiträge seit 2008
vor 5 Jahren

Sinnvoll bei solchen Zentralen Anlaufstellen ist immer DB -> Service -> Client.
Der Client sollte niemals direkt Zugriff auf die DB haben, sondern nur auf den Service.
Der Service, z.B. WebAPI mit .NET Core, nimmt dann die Anfragen der Clients entgegen und leitet diese an die DB weiter.

Der Vorteil davon ist, dass du zum einen nicht die Datenbank direkt an die Clients weiter gibst und diese somit nach aussen gibst.
Betrifft dann das Thema Sicherheit, da dieser Fehler immer wieder gemacht wird.
Auch aus Performance Sicht macht dies Sinn um durch Caching im Service unnötige Abfragen von Clients abzufangen.
Zusätzlich kann der Service per Connection Pool die Verbindungen zum Server besser regulieren, also jeder Client für sich.

Eine spezifische DB kann man eingeschränkt empfehlen, hängt dann auch von eigenem Geschmack und den Eigenheiten der DB ab.
Ich kann gerade bei den "kostenlosen" Datenbanken zu PostgreSQL raten.
Diese hat auch eine sehr gute Doku, wird auch von vielen OR Mappern sowie durch einen guten DB Provider für .ET Supportet.
Ebenfalls gibt es einige Foren und auch einige kommerzielle Support Möglichkeiten.

Du musst dich aber mit den Eigenheiten der Datenbanken(MVCC und Vaccum) vertraut machen, da PostgreSQL bestimmte Probleme auf seine Art löst.
Gerade bei hohem Durchsatz(Löschen, Hinzufügen, Updaten von Daten) kann sich dies entsprechend auf die Performance auswirken, wenn die DB nur mit Default Einstellungen betrieben wird.
Hier hilft z.B. pgtune als Ansatz.
Die Config sollte man auch unbedingt verstanden haben, hier hilft die Doku enorm weiter.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.834 Beiträge seit 2008
vor 5 Jahren

Caching macht man nur, wenn man muss.
Caching ist leider der beste Platz für Race Conditions oft ein Herd bei Problemen mit der Datensynchronität.

P
1.090 Beiträge seit 2011
vor 5 Jahren

Hi schau dir mal den Artikel Drei-Schichten-Architektur an.
Da findest du einen Einstieg.

Zur Datenbank. Ohne genauere Anforderungen zu kennen. Deinen Anforderung entsprechen eigentlich die meisten SQL Datenbanken. Vergleiche kannst du aber recht einfach Googeln und dir dann die Vor- und Nachteile der Server im Vergleich anschauen.

Was das FE angeht.
Wenn die Frage ist. Windows Forms oder WPF? Solltest du WPF (mit MVVM Pattern) nehmen Windows Forms wird eigentlich nicht mehr weiter Entwickelt.

Du solltest vielleicht mal überlegen ob nicht auch eine Web Anwendung für dich in Betracht kommt.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

E
Everwell Themenstarter:in
8 Beiträge seit 2018
vor 5 Jahren

Hallo zusammen

Vielen Dank für eure Antworten.

@Abt:
Ich möchte die SW auch nicht kommerziell nutzen, sondern nur intern. Solche Anforderungdefinitionen kann auch nur jemand stellen, der Erfahrung hat und weiss in welche Richtung alles geht. 🙂 z.B. woher soll ich wissen was gut ist, wenn ich nicht weiss was schlecht ist? 🙂 Ich hoffe hier einfach auf Vorerfahrung. =)

@T-Virus:
Hui da kommen aber gerade für mich neue Themen. 🙂 Also selber habe ich Erfahrung mit MariaDB, da man aber mit dem MySQL Connector arbeiten muss... naja. PostgreSQL schaue ich mir sehr gerne mal an. Hast du einige Beispiele/Lektüren für einen guten Service zwischen DB und Client? (Wird wohl sowas sein wie Laravel, Node.js - Ja auch in dieser Welt habe ich mal ein bisschen reingeschnuppert - Habe mich aber dann für .Net entschieden) 🙂

@Palin:
Webanwendung habe ich auch schon angeschaut, da aber alleine die Integration von .Net zu Office gegeben ist (und im Web nicht) ist C# für mich die erste Wahl.

Mal so kurz meine Vorstellung:

  • Client für Auftragsabwicklung, Schreiben, Mails
  • Kleine CRM-Funktionen
  • Kleine Vertragsverwaltung
  • Anfrageverwaltung
  • Für ca. 50 Nutzern
  • Das Netzwerk ist hinter einer Firewall komplett geschlossen

Grüsse
Everwell

16.834 Beiträge seit 2008
vor 5 Jahren

woher soll ich wissen was gut ist, wenn ich nicht weiss was schlecht ist? 😃

Weil gut relativ ist. Genauso wie schlecht.
Ohne Beschreibung, was für Dich gut heisst, ist die Anforderung unscharf - und damit ungültig 😉

Ein Service zwischen Client und DB ist einfach eine Web-Schnittstelle.
Diese ist unter anderem für Berechtigungen und Versionierungen verantwortlich.

Ob das mit ASP.NET, PHP oder NodeJS umgesetzt wird, ist dank technologieneutralen Protokollen / Schemen egal.

a aber alleine die Integration von .Net zu Office gegeben ist

In zukünftigen Office Versionen ist die primäre Extension-Sprache JavaScript, nicht C#.

E
Everwell Themenstarter:in
8 Beiträge seit 2018
vor 5 Jahren

Hallo Abt

Da hast du natürlich recht, für mich heisst gut halt einfach immer das Beste was möglich ist 🙂
Ich versuche zukünftig dies präziser zu gestalten.

Nun was mir im Hintergrund ist, dies Sicherheitsbedingt, Outlook durch den Client fremd zu steuern, sprich automatisch Mail aufmachen mit im Client definiertem Text, Mailadresse, eingestelltes Konto (falls mehrere vorhanden) Anlage gleich integriert und schon bereit zum absenden.

Wenn ich die ganze Thematik mit JS in Office (office.js) richtig verstanden habe, so wird diese später für Addins benutzt, jedoch nicht als Schnittstelle für programmgesteuerten Zugriff oder Ähnliches?

Ob das mit ASP.NET, PHP oder NodeJS umgesetzt wird, ist dank technologieneutralen Protokollen / Schemen egal. Interessant, dass man PHP auch in Clientumgebung nutzt. 🙂 In der .Net-Umgebung wird wohl ASP.NET stark vertrehten sein oder liege ich da falsch?

Gruss
Everwell

16.834 Beiträge seit 2008
vor 5 Jahren

Niemand hat davon gesprochen, dass PHP für den Client Betrieb genutzt wird
Ich hab vom WebService gesprochen, wie man sieht.

Dass man Outlook fremd steuert und E-Mails vorzubereiten; dafür gibts eigentlich Ticketsysteme.

E
Everwell Themenstarter:in
8 Beiträge seit 2018
vor 5 Jahren

Hallo Abt

Was wird dann im Client Betrieb normalerweise als Serviceschnittestelle genutzt?

Wäre auch normalerweise auch so, nur ist unser Office-Umgebung komplett abgeklapselt, da kommt kein Programm, ausser Outlook, drauf. Darum dieser "umständlicher" Umweg über eine Fernsteuerung 😦

Grüsse

P
1.090 Beiträge seit 2011
vor 5 Jahren

Der Client ruft im Allgemeinen ein WebApi auf.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

16.834 Beiträge seit 2008
vor 5 Jahren

Der Begriff WebApi ist ja etwas schwammig, weshalb Microsoft auch weg von der Bezeichnung geht.
In der Regel werden HTTP APIs angesprochen.

Sprich über HTTP; inhaltlich in der Regel Json - genauer gesagt Json über REST Services.
Eine Stufe weiter geht es dann über Hypermedia Services.

E
Everwell Themenstarter:in
8 Beiträge seit 2018
vor 5 Jahren

Also einfach um sicher zu gehen, ob ich das Ganze richtig verstanden habe -
Auch in einem Firmennetzwerk werden Daten folgend gezogen:
Von C# Client über einen HTTP Service (ASP.NET / NODE.JS /...) über SQL-System geholt, die Daten werden von SQL via jsonformat ans REST übergeben. WPF empfielt sich über WinForm.

Ist das alles korrekt? 😃

Grüsse

16.834 Beiträge seit 2008
vor 5 Jahren

Spielt keine Rolle welches Netzwerk man hat.
Ein dazwischen gestellter HTTP Service lohnt sich immer - allein aufgrund der gering(er)en Abhängigkeit und dem Vermeiden von direkten Datenbankzugriffen (und Berechtigungen).

4.939 Beiträge seit 2008
vor 5 Jahren

Bzgl. WPF oder WinForms: bei WPF solltest du auf jeden Fall mittels XAML und DataBinding (s. [Artikel] MVVM und DataBinding) arbeiten. Wenn du dich dagegen erst dadrin neu zurechtfinden mußt (und die Standardcontrols und Aussehen reichen), dann nimm WinForms. Kapsel auf jeden Fall den Serverzugriff und vermische ihn nicht mit UI-Code (so daß du diesen dann auch wieder austauschen könntest).

Und zu

Windows Forms wird eigentlich nicht mehr weiter entwickelt.

Auch WPF wird nicht mehr weiterentwickelt (es ist "Feature Complete").

E
Everwell Themenstarter:in
8 Beiträge seit 2018
vor 5 Jahren

Hallo zusammen

Ich habe mir die Themen http Service und abgekapselter Server Zugriff (wohl auf den http Service) mitgenommen. Gibt noch viel zu lernen für mich.

@Th69: Da ich sehr auf Aussehen eines Clients achte muss ich fast WPF nehmen.

Vielen Dank euch allen und wenn jemand noch mehr Tipps für mich hat; echt nur zu. 🙂

Grüsse
Everwell

16.834 Beiträge seit 2008
vor 5 Jahren

Verhaspel Dich bei internen Anwendungen nicht auf das Aussehen.
I.d.R. knallt das intern - vor allem größeren Unternehmen - gern.

P
1.090 Beiträge seit 2011
vor 5 Jahren

Schau dir mal Anti-Pattern an, damit kannst du schon mal Grundlegende Fehler umgehen. Es ist immer schwer zu sagen wie man wirklich was richtig macht. Aber auf Fehler zu Zeigen recht einfach.

Schreibe Unit Tests. Erstmal kannst du damit sicherstellen, das die Software, das macht was sie soll. Dann können sie noch Helfen bei Problemen bei der Architektur aufmerksam machen. Wenn es schwer wird Unit Test zu schreiben, liegt wohl möglich ein Fehler bei der Architektur vor. (Dann ruhig einfach mal mit einem Konkreten Beispiel eine Post hier im Forum erstellen.)

Dann gibt es noch Grundlegende Prinzipien, wie DRY, YAGNI, KISS und SOLID (ist eine Sammlung). Das ist jetzt nicht vollständig und umfasst eher Grundlegende Prinzipien. Wenn du dich daran hältst, macht du nicht unbedingt alles richtig. Aber du vermeidest grobe Fehler.

Entwurfsmuster (Pattern) zu kennen kann auch nicht schaden.

Und was wirklich wichtig ist. Hab Spaß beim Programmieren. 😉

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

E
Everwell Themenstarter:in
8 Beiträge seit 2018
vor 5 Jahren

Hallo zusammen

vielen Dank für die Inputs und Links, lese ich mal alles genau durch. 😃

Grüsse
Everwell

U
135 Beiträge seit 2009
vor 5 Jahren

Ich möchte die SW auch nicht kommerziell nutzen, sondern nur intern.

[...]

Mal so kurz meine Vorstellung:

  • Client für Auftragsabwicklung, Schreiben, Mails
  • Kleine CRM-Funktionen
  • Kleine Vertragsverwaltung
  • Anfrageverwaltung
  • Für ca. 50 Nutzern
  • Das Netzwerk ist hinter einer Firewall komplett geschlossen

Uhm... aus meiner Sicht ist das eine kommerzielle Nutzung 😉
"Kommerziell" und "nur intern" schließt sich nicht aus.

Kommerzielle Nutzung bedeutet i.d.R.* nicht, dass Du die Software weiterverkaufst, sondern dass Du sie beruflich nutzt, um direkt oder indirekt damit Geld zu verdienen. Und wenn Du die Software intern 50 Usern zur Verfügung stellst, fällt das definitiv unter "indirekt damit Geld verdienen", denn Deine Applikation unterstützt offensichtlich in irgendeiner Form ("CRM", "Vertragsverwaltung", ...) Geschäftsprozesse 😉

* wie die Lizenzbedingungen von mySQL konkret aussehen weiß ich nicht... möglich, dass man hier die Commercial License tatsächlich nur braucht, wenn man die Datenbank zusammen mit seiner Anwendung vertreiben möchte. Mir gehts nur darum, dass man Deine Aussage "naja, ich nutz es ja nur Firmenintern, nicht kommerziell" so pauschal nicht stehen lassen kann 😃