Du bist nicht eingeloggt! Möglicherweise kannst du deswegen nicht alles sehen.
  (Noch kein mods.de-Account? / Passwort vergessen?)
Zur Übersichtsseite
Hallo anonymer User.
Bitte logge dich ein
oder registriere dich!
 Moderiert von: Irdorath, statixx, Teh Wizard of Aiz


 Thema: pOT-lnformatik, Mathematik, Physik XXIII
« erste « vorherige 1 ... 24 25 26 27 [28] 29 30 31 32 ... 51 nächste » letzte »
erste ungelesene Seite | letzter Beitrag 
Der Büßer

AUP Der Büßer 06.12.2019
froehlich grinsen
Lol

Ex-Kiezkolleg hat seine Dissertation (LaTeX) nun mit interaktiven Diagrammen compiled. Kannst nun Matlab-artig Datatips setzen im PDF. Ziemlich cool.
Compilezeit: 17 Minuten
03.11.2020 19:07:55  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Das ist schon eine ziemlich coole Sache. Läuft das dann nur in Adobe-Produkten korrekt oder gibt es auch andere Viewer, die das packen?

Bonuspunkte, wenn er das auch noch aufs ArXiV korrekt kompilierend bekommt.Breites Grinsen

________________________

Ich versuche gerade mit matplotlib einen Line Plot. Eigentlich ist das die Vorbereitung für ein händisches Phasenportrait, aber da die internen Zeitskalen irgendwie regelmäßig massiv wechseln, war es bisher deutlich einfacher, einfach stückweise die ODE zu lösen, und dann händisch die numerische Lösung zusammenzustückeln. Das Problem damit ist, dass die Zeitpunkte, an denen ausgewertet und interpoliert wird, mitunter sehr dicht liegen. Jetzt hätte ich gerne ein paar einzelne Pfeile auf der resultierenden Linie, die die Richtung angeben, in die sich die Werte entwickeln.
 
Code:
ax3 = fig.add_subplot(313)
    ax3.plot(Mplot, Qplot, '-<')
    ax3.set_xlabel('M')
    ax3.set_ylabel('(Q/M)^2')
    ax3.set_ylim(0., 1.)

So wird der Plot zur Zeit ausgegeben. Das hat mehrere Probleme:

  • Ich muss händisch die Richtung vorgeben ('-<'), statt dass er automatisch von den ersten Einträgen in die Richtung späterer Einträge zeigt
  • Die Pfeile sind derart dicht, dass man sie nicht erkennen kann. Zwei, drei Pfeile pro Plot reichen uns.


Obendrein habe ich immer noch ein Problem mit dem ODE-Löser. Wir benutzen im Moment etwas, das - grob - wie folgt aussieht:
 
Code:
Mi = 1.477e10
yi = 0.6 
tStop = 1e98
tStopQ = tStop
xi = [Mi, yi]
psol_int = solve_ivp(f, t, xi, method='RK45', args=params, dense_output=True)


  • Das sind eigentlich immer noch nicht die Werte, die wir eigentlich wollen. Aber in beide Richtungen (größere Anfangsmassen Mi und kleinere) haben wir Probleme.
  • Wenn ich zu 1.0e10 gehe, gibt es einen Runtime Error wegen "overflow" in unseren Parametern params. Bei seeeehr viel kleineren Massen (Mi~100) klappt es wieder, obwohl jetzt einige der Zeitskalen absurd weit auseinander liegen (ein Prozess läuft ab innerhalb von ~1e-17, ein anderer innerhalb von 1e72). Das ist im Bereich, an dem wir interessiert sind, nicht der Fall.
  • Einfach zu logarithmischen Werten zu gehen, klappt nicht zwingend, weil Sachen intern durchaus 0 oder negativ werden können.
  • Wenn ich zu Mi~1.0e11 gehe, beschwert sich unser Array mit den Werten der Zeit t_i, zu denen M(t_i) geplottet werden soll, dass "IndexError: too many indices for array".
  • Wenn wir versuchen, Löser, die für steife ODE geeignet sind, darauf zu werfen, werden die Probleme mit den Exponenten NOCH schlimmer.
  • Die Zeiten sollten eigentlich auch so zu ~1e102 gehen, aber ab etwa tStop=1e99 bekommt man runtime errors in unserer Funktionsauswertung ("invalid value encountered in double_scalars") und sowas (bei einem Mi von 1.477e10, wo bei kürzeren Zeiten alles bei positiven Massen bleibt):



Ich vermute, dass irgendwelche subtilen Typkonversionen innerhalb von numpy/scipy passieren, wenn bestimmte interne/vorgegebene Werte irgendwas machen. Ich habe aber keine Ahnung, wie ich das vermeide, oder Arrays größer werden lassen kann, oder was auch immer. Ich kann mir nicht vorstellen, dass Speicher oder CPU ein Problem sein können, weil das alles in weniger als 10s gegessen ist.

Ich habe auch keine Ahnung, wie ich das in ein sinnvolles MWE verwandeln soll, weil da halt grob 150 Zeilen passieren, bis wir plotten können. Das ist alles kein großes Voodoo, und bestimmt kann da jemand mit mehr Ahnung voll intellente Dinge verbessern, gerade am Code und den Schleifen (...list comprehension...?), aber ich habe keine Ahnung (und bin der "erfahrene" Beteiligte...) - nur vermute ich auch, dass das Grundproblem, gigantische Reichweiten an Exponenten, ein grundlegendes Problem sein wird. Andererseits sollte, soweit ich das richtig verstehe, ein 64bit-double doch Exponentenreichweiten von grob 2048 zulassen. Also verstehe ich nicht, warum wir hier schon manchmal overflows bekommen...

verwirrt

Falls jetzt wer eine Idee hat, wie ich das Problem auch nur sinnvoll kommunizieren kann, so dass man mehr dazu sagen kann, als Stichworte und Allgemeinplätze, wäre ich begeistert... Das ist nämlich alles besonders deswegen frustrierend, weil die ersten Codes dazu aus der Mitte der 70er(!) sind. Das ist so die Sorte Zeug, die Teukolsky in die Numerik und letztlich zur Autorenschaft der Numerical Recipes getrieben hat.Erschrocken

Genius is one percent inspiration, ninety-nine percent perspiration.
[Dieser Beitrag wurde 4 mal editiert; zum letzten Mal von Wraith of Seth am 05.11.2020 2:02]
05.11.2020 1:55:04  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
homer is alive

AUP homer is alive 14.03.2022
Weiß nicht, ob ich dein Problem mit dem Plot richtig verstehe: wieso baust du dir nicht eine Maske wie zb mask = MPlot[MPlot % 10 == 0] (oder etwas anderes gleichverteiltes) und filterst deine Werte mit den Pfeilen danach? Wenn du eine Logik brauchst, könntest du die Differenzen zwischen den Werten auch betrachten? Du kannst auch den Plot in ax3 einmal mit einer normalen Linie machen und dann ganz reduziert nochmal ein ax3.plot(MPlotReduced, ...), dann zeichnet es ja nochmal in denselben subplot
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von homer is alive am 05.11.2020 2:10]
05.11.2020 2:06:24  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Frage
...es ist das erste Mal, dass ich mit matplotlib arbeite.Breites Grinsen Was ist eine Maske?peinlich/erstaunt

Ice cream is exquisite. What a pity it isn't illegal.
05.11.2020 2:07:34  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
homer is alive

AUP homer is alive 14.03.2022
Ich weiß nicht, ob deine Daten numpy oder Pandas sind, aber eine Maske ist zum Filtern von Arrays da. Ich bin jetzt nur am Handy, kann dir leider keinen Code schicken.

Brauchst du eine normale blaue Linie und ein paar Pfeile drin oder brauchst du *nur* Pfeile im letzten Plot?
05.11.2020 2:12:30  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Es soll eine blaue Linie mit wenigen Pfeilen sein. Das sind alles numpy-Sachen. Alle Abhängigkeiten (+Jupyterkram) sind mit
 
Code:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

abgefrühstückt.

Ice cream is exquisite. What a pity it isn't illegal.
05.11.2020 2:16:49  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
homer is alive

AUP homer is alive 14.03.2022
ax3 = fig.add_subplot(313)
ax3.plot(Mplot, Qplot, '-')
steps = int(len(Mplot)/3)
ax3.plot(Mplot[::steps], Qplot[::steps], '-<')
ax3.set_xlabel('M')
ax3.set_ylabel('(Q/M)^2')
ax3.set_ylim(0., 1.)

Könnte das funktionieren?

Alternativ eben ohne die Zeile vor steps.

Ist jetzt nicht einmal eine Maske, sondern nur normales Indexing.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von homer is alive am 05.11.2020 2:21]
05.11.2020 2:17:19  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Das ändert die Farbe und entweder scheint sich nichts an der Dichte der Pfeile zu ändern, oder aber ich bekomme "ValueError: slice step cannot be zero", wenn ich das /3 auf >~/800 pushe.

The good life is one inspired by love and guided by knowledge.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Wraith of Seth am 05.11.2020 2:26]
05.11.2020 2:25:37  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
homer is alive

AUP homer is alive 14.03.2022
Ja, gut, dass das bei zu großen Werten null wird, ist ja klar Breites Grinsen die Länge des Arrays wird durch die Anzahl der Pfeile geteilt, der Cast zu integer schneidet alle nachkommestellen ab. Daher kommt dann null raus. Die Farbänderung kommt von der zweiten Linie. Mach mal so.

ax3 = fig.add_subplot(313)
steps = int(len(Mplot)/3)
ax3.plot(Mplot[::steps], Qplot[::steps], '-<')
ax3.set_xlabel('M')
ax3.set_ylabel('(Q/M)^2')
ax3.set_ylim(0., 1.)

Sind Mplot und Qplot jeweils eindimensional? Nur dann kann der Ansatz mit den steps funktionieren. Davon ging ich aber aus, so wie dein Plot geschrieben ist.

Vgl sonst: https://numpy.org/doc/stable/user/basics.indexing.html

Du willst ja einfach ein Array erzeugen, welches weniger Einträge hat und das dann plotten. daher mein erster Gedanke an die Steps [::n] zum indexing, was dir nur jeden n-ten wert aus dem Array liefert
[Dieser Beitrag wurde 3 mal editiert; zum letzten Mal von homer is alive am 05.11.2020 2:40]
05.11.2020 2:31:49  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Dann kriege ich 3 Pfeile, ja, aber dann fehlt auch einfach mal ein Teil des Plots. Wenn ich stattdessen
 
Code:
ax3.plot(Mplot, Qplot, '-')
    steps = int(len(Mplot)/3)
    ax3.plot(Mplot[::steps], Qplot[::steps], '-<')

mache, bekomme ich


Keine Ahnung, warum das passiert - aber vor allem fürchte ich, dass er halt nur noch linear zwischen den auswertungspunkten "steps" interpoliert und ich damit schlimmstenfalls halt zwei Geradenstücke bekomme, wo eine Kurve sein sollte...

Arw sobriost!
05.11.2020 2:39:42  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
homer is alive

AUP homer is alive 14.03.2022
Fuck, völlig richtig.

"-<" gibt den Marker an und das heißt: Line plus Pfeil.

Daher nicht verwunderlich, dass er die Werte verbindet. "<" Wäre richtig

ax3.plot(Mplot[::steps], Qplot[::steps], '<')

Wenn du noch ein Argument color=... ergänzt, hat das dann auch keine andere Farbe.

#1f77b4 ist die Standardfarbe

Wieso der halbe Plot fehlt, weiß ich nicht. Wird der schrittweise zusammengesetzt? Wird der nicht orangene Teil wo anders gebaut? Wenn ich morgen am Rechner bin, kann ich dir nochmal helfen, jetzt leider nicht mehr... :(
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von homer is alive am 05.11.2020 2:47]
05.11.2020 2:45:20  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
PutzFrau

Phoenix Female
Versuch es mal mit zwei plots in ax3 (pseudo-code, habe matplotlib schon lange nicht mehr benutzt):
1. ax.plot(Mplot, Qplot, color=...)
2. ax.plot(Mplot[::steps], Qplot[::steps], color=..., linestyle = 'None', marker='<')

(1) macht die Kurve, (2) fügt Dreiecke ein, die nach links zeigen.

edit: zu lahm traurig

[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von PutzFrau am 05.11.2020 2:48]
05.11.2020 2:47:48  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Ups. Das hätte ich merken können, sorry.Breites Grinsen Ja, so bekomme ich Marker, aber ich habe den fürchterlichen Eindruck, dass die Datenpunkte zu ungleichmäßig verteilt sind, als dass eine gleichverteilte Stepsize da was reißt.traurig

Also doch eine Maske? Vielen Dank (EDIT: euch beiden!) schonmal.

Did you know that I'm riding this horse backwards?
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Wraith of Seth am 05.11.2020 2:49]
05.11.2020 2:48:26  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
PutzFrau

Phoenix Female
Kannst du gleichmäßig verteilt samplen und dann interpolieren, um die Punkte für die Marker zu generieren? Oder müssen die auf den Messpunkten liegen?

05.11.2020 2:55:00  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Idealerweise lägen die natürlich auf den Punkten, die auch die Kurve ziehen. Das grobe Ziel ist sowas:


Eine etwas unschöne Lösung ist:
  • Reichweite der M-Werte auslesen
  • In Anzahlpfeile+1 Stücke teilen
  • Pfeile beim nächst gelegenen M-Wert in meinen Daten an den Stückgrenzen ablegen

Ich vermute, dass der Marker "<" aber auch immer in die gleiche Richtung zeigt und sich nicht dreht, wenn das groß über die y-Werte wandert.

Wir vermuten, dass der Graph hier letztlich viele brutale Näherungen macht, sehr grob unterteilt und nicht numerisch, sondern per Hand gewonnen wurde.

Krawehl, krawehl! Taubtrüber Ginst am Musenhain, trübtauber Hain am Musenginst! Krawehl, krawehl!
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Wraith of Seth am 05.11.2020 3:05]
05.11.2020 3:03:40  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
homer is alive

AUP homer is alive 14.03.2022
Marker drehen in Numpy:
https://stackoverflow.com/questions/23345565/is-it-possible-to-control-matplotlib-marker-orientation

Dreieck: (3, 0, rotation)

plt.plot(x, y, marker=(3, 0, i*90), markersize=20, linestyle='None')

Aber viel Spaß beim Drehen Breites Grinsen

Man kann wohl auch FancyArrowPatches setzen:
https://stackoverflow.com/questions/47619545/how-to-plot-a-directed-line-in-matplotlib

Aber damit hatte ich noch nie etwas zu tun und ist auch schon deutlich advanced

Eine einfache Idee:
 
Code:
def find_nearest_index(array, value):
    array = np.asarray(array)
    idx = (np.abs(array - value)).argmin()
    return idx

n = 3

for value in np.linspace(Mplot.min(), Mplot.max(), n):
    idx = find_nearest_index(Mplot, value)
    ax3.plot(Mplot[idx], Qplot[idx], color=...)
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von homer is alive am 05.11.2020 3:16]
05.11.2020 3:10:03  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
...
Cool! Vielen Dank! Da habe ich doch was zum Spielen, während Mathematica mit einem anderen Plot dauerhaft einen anderen Prozessorkern auslastet.Breites Grinsen (Seit >1h...traurig)

Es tut so gut, endlich wieder sinnvolle Dinge zu tun.

Nächste Woche dann wieder >20 Bewerbungen und völlige Frustration.

Blow shit up, throw women through walls, got it.
05.11.2020 3:20:11  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Es kann so einfach sein:
 
Code:
ax3.plot(Mplot, Qplot, '-', marker='<', markevery=(0.1,0.1))

Das funktioniert auf Anhieb und sieht toll aus.

Dafür habe ich jetzt scheinbar ein viel kniffligeres Anliegen: Kann ich in marker= den aktuellen Index aufrufen?

Die Orientierungsgeschichte ist nämlich auch recht schnell gemacht mit Homers Fund. Nur beides kombinieren? ...uff.

No pun intended.
05.11.2020 7:03:18  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Der Büßer

AUP Der Büßer 06.12.2019
WoS, Sumatra jedenfalls zeigte es nicht an. Die datatips.
05.11.2020 7:18:43  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
homer is alive

AUP homer is alive 14.03.2022
 
Zitat von Wraith of Seth

Es kann so einfach sein:
 
Code:
ax3.plot(Mplot, Qplot, '-', marker='<', markevery=(0.1,0.1))

Das funktioniert auf Anhieb und sieht toll aus.

Dafür habe ich jetzt scheinbar ein viel kniffligeres Anliegen: Kann ich in marker= den aktuellen Index aufrufen?

Die Orientierungsgeschichte ist nämlich auch recht schnell gemacht mit Homers Fund. Nur beides kombinieren? ...uff.

No pun intended.


Für welche Art der Orientierung hast du dich jetzt entschieden? Fanyarrowpatch oder selber rotieren?

Eine Liste von Markern kann man dem Plot leider nicht übergeben. Man könnte über die Datenpunkte iterieren, aber ich fürchte, dann hat mein wieder ein ähnliches Problem durch die Ungleichheit.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von homer is alive am 05.11.2020 8:31]
05.11.2020 8:29:56  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
Ich hatte es über die Dreiecke gemacht, das geht eigentlich ganz flott. (Auch wenn ich nicht
np.arctan2
genommen habe, weil das nicht nachvollziehbaren Müll in meiner Situation machte.) Das kann ich auch gut mit deiner Lösung kombinieren, aber das sieht uncool aus, wenn die Graphen auch mal mehr Action über die y-Achse hin zeigen. Darüber bin ich dann auf
markevery
gestoßen.

Jetzt wäre irgendwie sowas wie "get_marker_index" cool. Dann könnte ich die Dreiecke mit dem markevery kombinieren.


Whinny If You Love Dragons
05.11.2020 8:37:30  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
homer is alive

AUP homer is alive 14.03.2022
Da muss ich leider passen. Finde auch ad-hoc nichts, was in die Richtung geht traurig Vielleicht finde ich gleich noch was. Ich bin mir sicher, dass man dafür eine Lösung findet.

Wäre es möglich, die Punkte äquidistant bzgl. der X-Achse auszugeben oder würde das die geplotteten Lines zu sehr verfälschen?
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von homer is alive am 05.11.2020 11:26]
05.11.2020 10:14:43  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Wraith of Seth

wraith_of_seth
 
Zitat von homer is alive

Da muss ich leider passen. Finde auch ad-hoc nichts, was in die Richtung geht traurig Vielleicht finde ich gleich noch was. Ich bin mir sicher, dass man dafür eine Lösung findet.

Wäre es möglich, die Punkte äquidistant bzgl. der X-Achse auszugeben oder würde das die geplotteten Lines zu sehr verfälschen?


Ne, das geht leider nicht, da die Punkte ja aus der DGL kommen.

Das Beispiel da oben ist da noch eines der harmlosesten, andere sind da etwas deutlicher auch entlang der y-Achse unterwegs.

Ich bin ausgeschlafen; ich hatte heute drei Tassen Kaffee.
05.11.2020 13:25:16  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
PutzFrau

Phoenix Female
ax.plot sollte dir eine Line Objekt oder so zurückgeben, vielleicht kannst du das ja dort bearbeiten.

£
05.11.2020 13:56:03  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Underboss

Underboss
Ich hätte ein paar Fragen an die Programmierer hier:

Ihr habt eine Klasse, welches eine eindeutige Row aus einer Datenbank widerspiegelt und ein paar zusätzliche Methoden zur Interaktion bereitstellt.
(Geht also über die reine Datenhaltung bzw. Verfügbarkeit der Daten hinaus)
Also vielleicht eine Artikel/Ware/Teil/Item-Klasse, deren Eindeutigkeit sich aus der Artikelnummer ergibt - z.B. "Toller_Artikel_123".

1. Wie würdet ihr jetzt dafür sorgen, dass die Daten aus der Datenbank in dieses Objekt gelangen?

Per Pattern (Factory, Builder, ...)?!

 
Code:
$itemFactory = new ItemFactory();
$item = $itemFactory->createItem('Toller_Artikel_123');
$item->getProductName();
$item->getItemNr();
$item->calc();


oder sollte sich das Objekt gleich selber die Daten holen können?

 
Code:
$item = new Item('Toller_Artikel_123');
$item->getProductName();
$item->getItemNr();
$item->calc();


2. Und wie könnte das ablaufen, wenn ich einen auf Dependency Injection mache und die Datenbankverbindung injizieren will?

 
Code:
$itemFactory = new ItemFactory(new DatabaseConnection());
$item = $itemFactory->createItem('Toller_Artikel_123');
$item->getProductName();
$item->getItemNr();
$item->calc();


 
Code:
$item = new Item(new DatabaseConnection());
$item->load('Toller_Artikel_123');
$item->getProductName();
$item->getItemNr();
$item->calc();


Oder gleich gänzlich anders?
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Underboss am 05.11.2020 22:12]
05.11.2020 22:11:20  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
derSenner

AUP derSenner 08.04.2020
Du suchst ein Database Abstraction, ObjectMapping bzw. Object-Relational Mapping.

https://packagist.org/packages/doctrine/orm
https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/basic-mapping.html

Du konfigurierst z.B. über Annotations, wo welches Object-Attribute in die Datenbank gehört, wo
PrimaryKeys 
o.ä. sind, Dinge
CASCADE
-artig gelöscht werden sollen etc.

Im Endeffekt arbeitest du dann nur noch mit den Objekten, ohne manuell noch irgendwelche Datenbankinterfaces selbst implementieren zu müssen.

In deinem Beispiel würdest du dir dann z.B. ein
ProductRepository
basteln, welches Objekte des Typs
Product
verwaltet. Im Repository gibt's dann z.B. eine Methode namens
getByTitle(string $title): Product { ... }
. Diese Methode holt das Objekt dann mittels ORM aus der Datenbank, gibt also automatisch das fertige Product-Object zurück.
[Dieser Beitrag wurde 6 mal editiert; zum letzten Mal von derSenner am 05.11.2020 22:30]
05.11.2020 22:22:34  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Aminopeptid

Arctic
Noch 'ne Anmerkung, falls du genau das nicht willst, weil du das zu Übungszwecken machst: Selbst dann ist Senners Hinweis gut, weil du dort abschauen kannst. Persistente Daten irgendwo auszulesen und schön in Objektform zu bringen, ist meines Erachtens mittlerweile ein größtenteils gelöstes Problem (auch wenn es immer noch Optimierungsmöglichkeiten gibt). Deswegen kann es sich für dich lohnen, dir den Quelltext anzuschauen und zu versuchen, zu verstehen, was die sich dabei gedacht haben, als sie das so programmiert haben, wie sie es programmiert haben. Dann aber mit einem kleinen Abstraktionsframework und Object Relational Mapper anfangen, wäre mein Vorschlag, weil man dann von den tausend Konfigurationsmöglichkeiten, Hooks und Spezialitäten nicht erschlagen wird. -- Einen guten Vorschlag dafür, was das dann sein könnte, habe ich allerdings nicht.
05.11.2020 22:27:28  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
derSenner

AUP derSenner 08.04.2020
Wenn man aktuell unterwegs ein will, dann lohnt sich meistens ein Blick in das https://symfony.com/doc/current/setup.html Framework.

Aber je nachdem, wie viel Erfahrung man mit Framworks, Routing, Abstractions, YAML-Configuration, Composer etc. hat, kann das großer Mehraufwand sein. Wenn man einfach selbst ne kleine App bastelt, die kein super-robustes, modulares Routing und Erweiterbarkeit braucht, dann macht es wsl. mehr Sinn, sowas wie
doctrine/orm
direkt zu verwenden - also ohne anderes Framework noch drumherum.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von derSenner am 05.11.2020 22:37]
05.11.2020 22:36:42  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
Es gibt "ORMs" und ORMs, bei manchen gibt es nur eher eingeschränkte Möglichkeiten Queries zu formulieren oder manche sind auch wirklich nur Mapper, sprich man kriegt nur das Mapping (Zeile aus der DB <=> Objekt in der Sprache) und muss sowas wie getByTitle selber machen. Andere haben eine nahezu vollständige Abstraktion von SQL drin, womit man SQL-Queries strukturiert manipulieren kann. Ersteres ist einfacher selber zu schreiben (als Lernprojekt), wobei letzteres deutlich leistungsfähiger und komplexer ist aber vielleicht auch mehr Verständnis zu Tage befördert (sowohl was SQL/Datenbanken angeht als auch im Hinblick auf Code<=>Daten-Konzepte). Der Vorteil ist natürlich, dass man "lediglich" SQL erzeugen muss, also keinen Parser für SQL braucht... Breites Grinsen
05.11.2020 22:41:34  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Underboss

Underboss
...
Danke für eure Antworten.

ORM ist mir soweit bereits bekannt und in anderen Projekten habe ich damit auch schon zu tun gehabt. Das Projekt an dem ich jetzt sitze hat nun leider altersbedingt nichts in die Richtung zu bieten. Auch wenn es absolut Sinn macht so etwas zu implementieren, ist es doch aktuell nicht "gewünscht".

Am Ende können die Objekte aber mehr als nur Daten halten bzw. eine Row wiederzuspiegeln. Das hatte ich micht "calc()" versucht zu verdeutlichen.
Aber wie man es auch dreht und wendet, am Ende obliegt es mir, da irgendwie die Daten aus der Datenbank in so ein Objekt zu bekommen. Es ist also wahrscheinlich eher eine Entscheidung zwischen Pest und Cholera.
05.11.2020 22:49:38  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
 Thema: pOT-lnformatik, Mathematik, Physik XXIII
« erste « vorherige 1 ... 24 25 26 27 [28] 29 30 31 32 ... 51 nächste » letzte »

mods.de - Forum » Public Offtopic » 

Hop to:  

Thread-Tags:
pimp 
Mod-Aktionen:
19.11.2021 15:40:37 Atomsk hat diesen Thread geschlossen.
05.04.2020 13:23:20 red hat diesem Thread das ModTag 'pimp' angehängt.

| tech | impressum