martinjo hat geschrieben: ↑Freitag 23. November 2018, 17:05
Gerade wollte ich der Klasse Locations eine neue Funktion hinzufügen, "get_locations_product_infos", daher wollte ich die Klasse "Products" importieren. Die Klasse Products importiert jedoch schon die Klasse Locations, um die Orte der Produkte zu finden.
Ich würde das eher so aufbauen: Ein Ort ist die Sammelstelle für verschiedene Produkte, also sollte auch er seine derzeit vorhandenen Produkte kennen. Ich nehme ja mal an, dass die Sache mit dem Ort eine dynamische Geschichte ist, sich also ändern kann, d. h. das Produkt kann den Ort wechseln. Und selbst wenn mit dem Ort nur genau ein Produkt verknüpft werden kann (z. B. weil er ein bestimmtes Fach im Lager darstellt), passt dieses Vorgehen immer noch.
Das Produkt hingegen sollte gar nichts davon wissen müssen, wo es gerade liegt. Da der Ort der "Verwalter" ist, muss er gefragt werden. Und somit muss das Produkt keine Orte mehr importieren, sondern es erfolgt stattdessen eine Zuweisung via
location.set_product(dein_produkt) oder etwas in der Art. Diese Zuweisung macht aber nicht das
products-Modul, sondern der Prozess, der zur Bewegung des Produktes führt, also z. B. der Warenein- oder ausgang oder eine Bewegung innerhalb des Lagers.
Das
locations-Modul hätte außerdem eine Funktion zum Abfragen des Ortes für ein Produkt:
Code: Alles auswählen
def get_location(product):
for location in locations:
if location.has_product(product):
return location
Und auch hier würde ich auf einen Import der
Product-Klasse verzichten. Typprüfungen vermeidet man in Python bekanntlich so gut es geht.
has_product() würde halt bei einem falschen Typen stumpf
False liefern. Und schon ist man ein bißchen was von der Verzahnung beider Module losgeworden...