Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

51

10.03.2015, 06:45

Gibt's auch Argumente warum? Weil es für Mobile passt? ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

52

10.03.2015, 08:24

Ich finde das ziemlich unkomisch und eine sinnvolle Rückfrage.

Gradle ist zwar ziemlich cool, hat aber gegenüber Maven noch einige Schwächen, besonders wenn man viel wert auf korrekte pom-Files und eine Maven-konforme Behandlung von Dependency-Konflikten legt. Bei größeren Projekten kann das, wenn man sich darauf verlässt, schon zu Problemen führen. Bspw. verwendet Gradle bei Konflikten die "Newest"-Strategie während Maven die "Nearest"-Strategie verwendet (siehe http://rafael.cordones.me/2013/05/06/tra…ven-and-gradle/).

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

53

10.03.2015, 09:20

sei nicht immer so komisch.
Ich bin keineswegs komisch, ich wollte Deine persönlichen Argumente hören, warum Du etwas bevorzugst und nicht nur den Fakt, dass Du es bevorzugst. Der Artikel selbst hilft mir dabei nicht, ich bin durchaus im Bilde wie es um Maven, Ant und Gradle steht. Wie gesagt ging es mir dabei aber um Deine persönlichen Gründe, die zu der Entscheidung geführt haben. Das halte ich für eine wichtige Grundlage in Diskussionen.
PS: Ich mag Birnen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

54

19.03.2015, 13:40

Was mich zu der Thematik noch mal interessieren würde: nutzt ihr in euren Unternehmen alle Domain Driven Design? Ist das Industriestandard oder wie setzt ihr Software um, welchem Leitfaden folgt ihr?
Weil ich mit dem DDD glaube ich nicht glücklich werde. Für mich schreit das nach hässlichem Code mit massivem Overengineering, und auch in dem Projekt hier sieht es stark danach aus. Mag sein dass das nicht überall so ist, aber ich glaube die Java Welt nimmt OO allgemein "zu ernst".

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

55

19.03.2015, 14:53

Ich denke das kommt der Wartung von Software zu gute, da man oft mit OO Patterns arbeitet. Auch lose Kopplung ist immer von Vorteil. In Module unterteilen.

Irgendwie muss man ja Herr werden des ganzen.

Deswegen arbeitet OO gut mit dem Prinzip. Teile und Herrsche.

Grundsätzlich richtig, man kann OO aber auch falsch anwenden, und soweit ich mich nicht täusche deutet alles darauf hin, dass das auch in diesem Fall gegeben ist. (Das meinte er wahrscheinlich mit dem "zu ernst nehmen".) Wenn in seinem Fall also mit Objekten, aber nicht ordentlich objektorientiert gearbeitet wird, dann bringt ihm die Aussage, dass (richtig angewendetes) OO gut ist (was nicht falsch ist), nicht viel.


DDD:
Ich würde in der Hinsicht zwar gute Ratschläge geben, das kann ich aber nicht (aus Erfahrung heraus). Dass wir aber kein DDD einsetzen, heißt aber weder, dass DDD schlecht ist, noch dass man mit anderen Vorgehensweisen besseren Code produziert.
Und bedenke in der Hinsicht, dass es nicht von der Vorgehensweise abhängt, ob guter Code entsteht. Man kann bspw. versuchen Scrum anzuwenden, wenn man es aber nicht richtig macht, sind auftretende Probleme nicht unbedingt die Schuld von Scrum.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

56

19.03.2015, 15:09

Nein natürlich nicht. Es ging mir eher um einen allgemeinen Überblick, also mal links und rechts schauen wie andere Firmen entwickeln.
Ich habe meinen Beitrag auch schon wieder etwas provokant formuliert, wahrscheinlich weil ich einfach unzufrieden damit bin in Java zu programmieren :P Geht alles vorbei.

@Bambi: ich habe nichts gegen OO, nur wie excessiv es speziell in Java eingesetzt wird. Ich habe hier Klassen vorliegen die nur aus static Methoden bestehen, ist halt alles nicht so optimal.

Unser Framework baut auf DDD auf, und das trifft den Kern irgendwie nicht finde ich, da die Leute dann zwar eigentlich schön in dem DDD System arbeiten sollen, letztendlich aber doch wieder zu viel gepfuscht wird und eigene Wege beschritten werden. Dazu kommt dann der Einsatz von Patterns überall, immer wenn es geht. Ich höre immer zwei Dinge wenn neue Probleme gelöst werden sollen: wir nehmen Pattern XY, oder: da gilt dann Prinzip XY (KISS, DRY, ...) anstatt es einfach mal simpel zu halten und den offensichtlichen Weg zu nehmen.

Die modelierung endet dann in total redundanten Klassen. Ich bin aktuell dabei das Model in ein anderes Programm zu übertragen (UML) und sehe daher gerade jede Dopplung. Ich habe hier bestimmt 4-5 Klassen die alle Member für Adresse, Geburtsdatum, Name/Vorname usw. haben.

Mein Hobby Projekt Ansatz sähe da so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Personendaten{
    String name, vorname;
    // ...
}

class Adressdaten{
    String strasse;
    int hausnummer;
    // ...
}

class SpeziellesObjekt{
    Personendaten personendaten;
    Adressdaten adressdaten;
}


So fände ich es sauber.
Natürlich ist mein Gedankengang da etwas naiv, mir ist bewusst dass wenn man auf der einen Seite eine Datenbank hat und auf der anderen einen Client die Daten da irgendwoher kommen müssen und es komplexer wird. Trotzdem wird hier imo unnötig Komplexität erzeugt indem dann ewig lange Vererbungsketten gebaut werden, mit Interaces die sowieso nie geändert werden (was diese häufig obsolet macht), Klassen mit einer Methode die eigentlich Funktionen sein sollten, viel zu viele Kompromisse und veraltete, viel zu schwergewichtige Frameworks (teilweise um die unzulänglichkeiten von Java auszugleichen) usw.
Allgemein noch nicht so meins.

[Edit] Also wahrscheinlich bin ich einfach zu idealistisch und zu sehr von meiner eigenen Meinung überzeugt. Zumindest fällt mir das so auf beim noch mal durchlesen :P
Ich fühle mich hier in Deutschland was IT Sachen angeht einfach nicht als Vorreiter. Die ganzen coolen/modernen Sachen kommen aus den USA...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (19.03.2015, 15:36)


buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

57

19.03.2015, 15:50

In Java gilt: Wer getter/setter und (vor allem) statische Methoden verwendet, der programmiert kein OO Design. Gerade bei statischen Methoden sieht man immer sofort, wer es einfach nicht kapiert. Es gibt hier nur ganz, ganz, ganz wenige Ausnahmen wo eine statische Methode erlaubt ist. Aber vor allem Helper Klassen mit statischen Methoden dokumentieren nur die Unfähigkeit des Programmierers. In der Softwarewelt ist es halt auch wie in jedem anderen Job. Es gibt wenig gute und einen ganzen großen Haufen von schlechten Programmierern.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

58

19.03.2015, 16:13

+1

fkrauthan

Supermoderator

Beiträge: 979

Wohnort: Vancouver

Beruf: Software engineer

  • Private Nachricht senden

59

19.03.2015, 23:46

Zu getter und setter. Wenn du Pojos verwendest sind die normal. Ausserdem wenn du zu faul bist die zu erstellen es gibt Annotation libraries die die automatisch erzeugen.
Homepage: fkrauthan.de | Browser-game: flowergame.net

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

60

01.04.2015, 07:26

Aber vor allem Helper Klassen mit statischen Methoden dokumentieren nur die Unfähigkeit des Programmierers.
Nein, falsch. Solche Methoden erhöhen die Kapselung und sorgen dafür, dass Klasse nicht unnötig aufgebläht werden. Das gilt wohlgemerkt nur unter gewissen Umständen, wie etwa dann, wenn die betreffende Methode auf keinerlei Attribute oder Methoden der Klasse zugreift, in der sie liegt. In so einem Fall ist es clean code und good practice die Methode eben nicht Teil der Klasse zu machen, sondern auszulagern.

Einfaches Beispiel:

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    class Log {
        private final FileOutputStream writer;

        public Log(String filename) throws FileNotFoundException {
            backup(filename);
            writer = new FileOutputStream(filename);
        }

        private void backup(String filename) {
            File target = null;
            int fileCounter = 0;
            do {
                String targetName = filename + "-" + fileCounter + ".bak";
                target = new File(targetName);
            } while (target.exists());
            File source = new File(filename);
            source.renameTo(target.getAbsoluteFile());
        }
    }
Es gibt keinen Grund, warum diese Methode erstens nicht statisch und zweitens überhaupt in dieser Klasse sein sollte. Im Gegenteil, sie gehört ausgelagert:

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    class Log {
        private final FileOutputStream writer;

        public Log(String filename) throws FileNotFoundException {
            FileUtil.backup(filename);
            writer = new FileOutputStream(filename);
        }
    }
    
    final class FileUtil {
        private FileUtil() {
        }
        
        public static void backup(String filename) {
            File target = null;
            int fileCounter = 0;
            do {
                String targetName = filename + "-" + fileCounter + ".bak";
                target = new File(targetName);
            } while (target.exists());
            File source = new File(filename);
            source.renameTo(target.getAbsoluteFile());
        }
    }

Die Unfähigkeit eines Programmierers wäre dokumentiert, wenn hier statt der zweiten Variante die erste Variante implementiert worden wäre, weil eben die erste doppelter Unfug ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »BlueCobold« (01.04.2015, 08:09)


Werbeanzeige