Hallo liebes Forum,
ich habe ich schon viel mitgelesen und konnte auch viel lernen.
Nun stehe ich aber vor einer, für mich größeren Sache, und ich weiss nicht wie ich dies Aufteilen kann/soll.
Hier geht es nicht um ein Programmierprobleme sondern eher um die Architektur.
Also mal zu meinem Problem:
Ich habe eine Datenbank (SQL Server) in dieser DB werden unter anderem die Termine gespeichert, die Kunden mit uns haben.
Was soll jetzt per Pyton gelöst werden:
1. Das Programm soll jeden Tag um 4:00Uhr automatisch starten.
2. Es soll die DB nach Terminen durchsuchen die heute + 2Tage liegen. (Heute ist 25.11. also dann die Termine für den 27.11)
3. Für jeden Termin soll eine Termin.isc Datei erstellt werden.
4. Diese Datei soll dann an den Kunden per E-Mail versenden als Terminerinnerung verschickt werden.
Die einzelnen Schritte zuprogrammieren ist nicht das Problem, aber dies sinnvoll Aufteilen.
Ich kann einen langen Spagettiecode schreiben und es läuft.
Aber vielleicht möchte ich einzelne Teile wieder verwenden, z.b. das erstellen der .isc Datei.
In einem anderen Senario soll nicht ein Termin in die Datei, sondern ein Serientermin.
Der E-Mail Versand soll vielleicht auch mal anders benutzt werden, z.b. Geburstagsgrüße
Meine Idee:
- eine Klasse DB;
Mit dem Objekt dieser Klasse kann ich dann die Termine auslesen.
- eine Klasse .isc Datei Operationen;
Mit dem Objekt dieser Klasse kann ich dann die Datei erstellen und nach dem Versand löschen
- eine Klasse E-Mail Versand;
Mit dem Objekt dieser Klasse kann ich dann die E-Mail versenden
Ich hoffe Ihr versteht was ich meine.
Ja ich weiß OOP ist nicht mein Steckenpferd, daran liegts.
Vielleicht könnt ihr mich auf die richtige Spur bringen, Danke schonmal
Die Strukturierung von einer Anwendung
Üblicherweise benutzt man Funktionen für einzelne Schritte.PythonNoob123 hat geschrieben: Samstag 23. November 2024, 12:06 Die einzelnen Schritte zuprogrammieren ist nicht das Problem, aber dies sinnvoll Aufteilen.
Ich kann einen langen Spagettiecode schreiben und es läuft.
Aber vielleicht möchte ich einzelne Teile wieder verwenden, z.b. das erstellen der .isc Datei.
Gerade wenn du mit Klassen und OOP noch unsicher bist, verstricke dich nicht schon sofort.
Falls du einzelne Funktionen zukünftig mal wiederverwenden willst, kann man dann beizeiten leicht darauf zurückkommen.
Fürs erste würde ich es nicht zu kompliziert machen. Halte es einfach und übersichtlich. Vielleicht wirst du sie ja doch nicht wiederverwenden.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Im Prinzip hast Du Deine Programmstruktur schon beschrieben, und die sollte auch ähnlich in einem Programm abgebildet werden.
Konkret, eine main-Funktion, die alle Termine abfragt, und für jeden Termin ein ics-Objekt erzeugt und das per email verschickt.
Also hast Du drei weitere Funktionen, get_appointments, create_ics, und send_email.
Dafür mußt Du keine Klassen schreiben, bis auf das Model, das sqlalchemy für die Datenbank braucht. Alles weitere sind einfache Funktionen.
Für ics gibt es ein Paket mit selbem Namen auf pypi. Eine Datei solltest Du nicht erzeugen, das kann man alles im Speicher erledigen.
Konkret, eine main-Funktion, die alle Termine abfragt, und für jeden Termin ein ics-Objekt erzeugt und das per email verschickt.
Also hast Du drei weitere Funktionen, get_appointments, create_ics, und send_email.
Dafür mußt Du keine Klassen schreiben, bis auf das Model, das sqlalchemy für die Datenbank braucht. Alles weitere sind einfache Funktionen.
Für ics gibt es ein Paket mit selbem Namen auf pypi. Eine Datei solltest Du nicht erzeugen, das kann man alles im Speicher erledigen.
- __blackjack__
- User
- Beiträge: 14047
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@PythonNoob123: Ich würde mich den Vorrednern anschliessen. Nicht zu kompliziert denken. Wenn der E-Mail-Versand an anderer Stelle wichtig wird, *dann* schauen was hat man schon und kann man da etwas heraus ziehen was dann beide Programme sinnvoll verwenden können. Nicht von vornherein alles so schreiben das man es für alles mögliche verwenden könnte. Das schafft nur unnötige Komplexität, die erfahrungsgemäss selten *tatsächlich* später gebraucht wird.
Man könnte natürlich alles in einer grossen Funktion runterschreiben, aber das ist dann schlecht testbar. Aufteilung auf Funktionen ergibt sich oft ganz gut aus Tests heraus. Zum Beispiel möchte man ja mal den E-Mail-Versand testen. Und dass ohne erst eine Datenbank mit einem Testtermin aufsetzen zu müssen. Das müsste man ja tun wenn der Versand in einer grossen Funktion am Ende stehen würde.
Was Klassen angeht: Auch da kann man schauen ob sich da im Laufe der Entwicklung welche Ergeben. Wenn man beispielsweise immer den gleichen Satz an Werten die zusammengehören als Einzelwerte an Funktionen übergeben muss, bietet es sich an die in einer Klasse zusammenzufassen. Und dann sieht man häufig auch Operationen die zu diesen Daten gehören und die man als Methoden dort hin verschieben kann. Wichtig ist, dass es einen Zustand in den Objekten gibt, und die Klasse nicht einfach nur Funktionen enthält. Deine Beschreibung von „eine Klasse .isc Datei Operationen“ klingt da verdächtig falsch.
Man könnte natürlich alles in einer grossen Funktion runterschreiben, aber das ist dann schlecht testbar. Aufteilung auf Funktionen ergibt sich oft ganz gut aus Tests heraus. Zum Beispiel möchte man ja mal den E-Mail-Versand testen. Und dass ohne erst eine Datenbank mit einem Testtermin aufsetzen zu müssen. Das müsste man ja tun wenn der Versand in einer grossen Funktion am Ende stehen würde.
Was Klassen angeht: Auch da kann man schauen ob sich da im Laufe der Entwicklung welche Ergeben. Wenn man beispielsweise immer den gleichen Satz an Werten die zusammengehören als Einzelwerte an Funktionen übergeben muss, bietet es sich an die in einer Klasse zusammenzufassen. Und dann sieht man häufig auch Operationen die zu diesen Daten gehören und die man als Methoden dort hin verschieben kann. Wichtig ist, dass es einen Zustand in den Objekten gibt, und die Klasse nicht einfach nur Funktionen enthält. Deine Beschreibung von „eine Klasse .isc Datei Operationen“ klingt da verdächtig falsch.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari