Seite 1 von 1

ProjectPlan

Verfasst: Samstag 27. Juli 2013, 20:59
von jtschoch
Hey Python Freunde,

Ich habe ein neues Programm gebastelt was euch bei euren Projekten behielflich sein könnte.
Da ich ein wenig in Eile bin kann ich hier nicht so viel darüber erzählen.

Besucht einfach den Link: https://github.com/Jonas18175/ProjectPlan
Da findet ihr auch eine ausführliche Beschreibung.

Die Programmversion ist noch im development-status.
Nächte woche werde ich die Erste release rausbringen.

jtschoch

Re: ProjectPlan

Verfasst: Samstag 27. Juli 2013, 21:57
von Hyperion
Hmm... Du bist ja nun schon länger hier im Forum aktiv, da frage ich mich bei dem Code leider, wie wenig bei Dir augenscheinlich hängen geblieben ist.

Grundsätzlich scheinst Du Dir ja schon Mühe gegeben zu haben, aber alleine die Namen zeigen, dass Du PEP8 immer noch nicht verinnerlicht hast. Daran solltest Du *dringend* arbeiten; speziell wenn Du nach Mitstreitern suchst, wie auf Github beschrieben.

Zufällig stach mir das hier ins Auge:

Code: Alles auswählen

class ClassRegister(Enum):
    """This registered all classes"""

#...
    
    def hasInstanz(self, name):
        try:
            self[name]
            return True
        except KeyError:
            return False
Das ist doch furchtbar umständlich! Für das Prüfen, ob ein Schlüssel in einem Dictionary enthalten ist kann man den ``in`` Operator benutzen:

Code: Alles auswählen

class Foo:
    def has_key(self, key):
        return key in self.__dict__

f = Foo()

f.has_key("foo")
False

f.__dict__["foo"] = 42

f.has_key("foo")
True
Dazu kommt auch hier der Name... klassisches Denglisch! ``hasInstanz``... wenn schon ``hatInstanz`` oder ``hasInstance``. Dazu ist die Formatierung eher Javaesque; in Python gilt bei Funktionen und Methoden lower_case_with_underscore, in diesem Falle also ``has_instance``.

Das sind zwar Kleinigkeiten, aber ich denke das zieht sich durch das gesamte Projekt. Daran solltest Du wirklich arbeiten.

Dein selbst gebauter ORM ist auch eher... naja - von Transaktionen sehe ich da z.B. nichts. Ebenfall ist mir unklar wo sich das "API-System für SQL-Server Anbindung" befindet. Ich sehe da nur Code für SQLite.

Wenn Du schon viel abstrahieren willst und wohl Wert auf den Support verschiedener DBMS legst, würde ich Dir einfach SQLAlchemy ans Herz legen, ehrlich! Das spart am Ende Arbeit, auch wenn Du Dich zunächst darin einarbeiten musst.

Das hier riecht auch eher nach Java:

Code: Alles auswählen

    #@Override
    def createTable(self):
        pass
In Python ist es eigentlich Konvention, in einer zu überschreibenden Methode eine Exception auszulösen:

Code: Alles auswählen

    def createTable(self):
        raise NotImplementedError("Please implement 'createTable'")
Mir fehlt irgend wie auch ein Domain-Layer. Evtl. könnte man den Datenbank-Teil als solchen ansehen, aber so eine enge Kopplung an die Persistenzschicht ist imho eher unschön, wenn man (später?) Domänenlogik implementiert.

Generell würde auch erwarten, dass *mehr* und *genauere* Infos auf der Projektseite verfügbar sind, die das Projekt beschreiben. Unter einem Bug-Tracker kann man sich sicherlich etwas vorstellen, aber ein paar Features sollte man schon erwähnen. Evtl. auch, was Deine Software von Bugzilla, Track, Mantis usw. abhebt. Last but not least helfen Screenshots durchaus das Interesse bei einem potenziellen Nutzer oder gar Mitstreiter zu wecken.

Außerdem musst Du an der Dokumentation arbeiten; es muss ja nicht nur reine API Doku sein, aber aktuell ist da im Grunde genommen nichts, was mir zeigt, wie ich Code oder auch das Programm verwenden soll.

Bevor ich einen solchen Schnellschuss ("Ich habe das Programm in 3 Tagen zusammengeschrieben, ...") veröffentliche (oder publik mache), würde ich doch an diesen Punkten arbeiten ;-)

Re: ProjectPlan

Verfasst: Sonntag 28. Juli 2013, 06:06
von jtschoch
Hallo Hyperion,

du hast da was überlesen, da steht kommende Favorites.
Vielen Dank das du mich auf diese Dingen hingewiesen hast, ich werde dran Arbeiten.
Die Github Version desm Projektes ist ja auch noch nicht fertig.

Und wie meinst du das?
Mir fehlt irgend wie auch ein Domain-Layer. Evtl. könnte man den Datenbank-Teil als solchen ansehen, aber so eine enge Kopplung an die Persistenzschicht ist imho eher unschön, wenn man (später?) Domänenlogik implementiert.
Das mit den "in" wusste ich, aber ich habe es dort wieder mal vergessen :?

PEP8
Function names should be lowercase, with words separated by underscores as necessary to improve readability.

mixedCase is allowed only in contexts where that's already the prevailing style (e.g. threading.py), to retain backwards compatibility.
Darf ich nicht mal meinen Stiel beibehalten?

Und zu Java, ja ich habe es ein wenig in Java-Style gemacht.

Re: ProjectPlan

Verfasst: Sonntag 28. Juli 2013, 08:30
von kbr
jtschoch hat geschrieben:Darf ich nicht mal meinen Stiel beibehalten?
Deinen Stiel darfst Du behalten, aber Deinen Stil solltest Du anpassen ... :wink:

Re: ProjectPlan

Verfasst: Sonntag 28. Juli 2013, 08:40
von DasIch
jtschoch hat geschrieben: PEP8
Function names should be lowercase, with words separated by underscores as necessary to improve readability.

mixedCase is allowed only in contexts where that's already the prevailing style (e.g. threading.py), to retain backwards compatibility.
Darf ich nicht mal meinen Stiel beibehalten?
Das bezieht sich ausschliesslich auf Code der vor PEP8 geschrieben wurde.

Re: ProjectPlan

Verfasst: Sonntag 28. Juli 2013, 09:04
von Sirius3
@jtschoch: unter »Enum« habe ich mir bisher immer etwas anderes vorgestellt. Aber in der Klasse wird auch Dein Stilmix deutlich. Standard-Python-Schreibweise und Deine spezielle Schreibweise nebeneinander. Übrigens: Was ist der Unterschied zwischen »has_key« und »compareKey« (außer dass zweiteres deutlich langsamer und umständlicher geschrieben ist)?