Architektur der Software

S3CR3T

Mitglied
Hallo,

ich habe folgendes Problem.
Ich beschäftige mich seit einiger Zeit mit Java, es fällt mir auch nicht schwer, alles zu verstehen.
Mein Problem ist einfach, sobald ich ein größeres Projekt versuche, weiß ich einfach nicht, wie ich dieses strukturieren soll. Einerseits möchte ich nicht die Architektur, unterschiedlicher Tutorials einfach übernehmen, andererseits möchte ich nicht einfach Projekte kreieren, welche total von der Norm abweichen, wenn ich mir beispielsweise, Tutorials zum Thema 2D-Spiele ansehe, frage ich mich, warum schreiben sie die Methode startThread(); in eine startGame(); Methode?
Wenn man doch einfach ein Thread in der startGame() Methode erstellen könnte.
Ich bin manchmal skeptisch und habe das Gefühl, dass ich ein schlechteres Tutorial benutze.
Bücher nutze ich ebenfalls, leider habe ich bei Bücher das selbe Problem.
Woher wisst ihr, oder wusstet ihr, wie das Muster eurer Architektur sein soll, was gibt euch die Bestätigung, dass die Anwendung optimal ist.

Danke schonmal im Voraus, für die Antworten.
 

Robat

Top Contributor
Ob meine Architektur optimal ist hab ich mich nie gefragt. Ich versuche mir vor/während dem Programmieren einfach immer wieder die Frage zu stellen, ob mein Programm noch gewissen Prinzipien folgt.
Dazu zählt z.B. ob das Design-Pattern noch erkennbar ist (MVC, MVP, ...) oder ob die 5 Prinzipien von SOLID noch gelten.
Um dein Beispiel aufzufassen würde ein startGame() vielleicht mehr tun als nur einen Gamethread zu starten, von daher ist es legitim eine Methode startThread() aufzurufen (wobei man sich über den Namen streiten kann) damit man die startGame() Methode nicht überfüllt.
 

Javinner

Top Contributor
S3CR3T hat gesagt.:
...wenn ich mir beispielsweise, Tutorials zum Thema 2D-Spiele ansehe, frage ich mich...
Was die Sache nicht einfach macht ist, dass es weder "das Tutorial" noch "das Buch" zum Thema gibt. Jeder Autor hat seine Sicht und Vorgehensweise und diese versuch er dem Zuschauer bzw. Leser näher beizubringen. Dazu kommt noch die Frage, wer hinter dem Tutorial überhaupt steht? Hat er wirklich den Plan oder ist es nur eine Kopie der Kopie von Kopie eines Tutorials, den du noch nicht gesehen hast? Dann ändert sich ständig etwas und Neues kommt dazu, Altes fällt weg und ist paar Jahre später nicht mehr aktuell. Android ist da das beste Beispiel. Zudem kommt natürlich die Erfahrung von dem Autor: der Level-80 Programmierer füllt ein Array mit Zahlen, da blickt man als Anfänger nicht durch!..

Was ich sagen will: setze dir ein kleines Ziel und versuch es zu erreichen. Ziehe dazu ein gutes Fachbuch hinzu und versuche das Gelesene umzusetzen. Schau dir zu jeweiligem Thema, ganz gleich ob du es verstanden hast oder nicht, ein Video an, besser mehrere. Das öffnet einem meist die Augen. Versuche alle Bereiche des Beispiels abzudecken, sprich Logik, Grafik und Speichern. Du wirst sehen, dass ein minimalistisches Projekt von dir alles abverlangen wird.
Wenn du hier sicher und automatisiert vorgehen kannst, dann kannst du ein größeres Projekt starten und die erworbene Erfahrung darin einfließen lassen.
 

S3CR3T

Mitglied
Ob meine Architektur optimal ist hab ich mich nie gefragt. Ich versuche mir vor/während dem Programmieren einfach immer wieder die Frage zu stellen, ob mein Programm noch gewissen Prinzipien folgt.
Dazu zählt z.B. ob das Design-Pattern noch erkennbar ist (MVC, MVP, ...) oder ob die 5 Prinzipien von SOLID noch gelten.
Danke, ich verstehe was du meinst.

Was die Sache nicht einfach macht ist, dass es weder "das Tutorial" noch "das Buch" zum Thema gibt. Jeder Autor hat seine Sicht und Vorgehensweise und diese versuch er dem Zuschauer bzw. Leser näher beizubringen. Dazu kommt noch die Frage, wer hinter dem Tutorial überhaupt steht? Hat er wirklich den Plan oder ist es nur eine Kopie der Kopie von Kopie eines Tutorials, den du noch nicht gesehen hast? Dann ändert sich ständig etwas und Neues kommt dazu, Altes fällt weg und ist paar Jahre später nicht mehr aktuell. Android ist da das beste Beispiel. Zudem kommt natürlich die Erfahrung von dem Autor: der Level-80 Programmierer füllt ein Array mit Zahlen, da blickt man als Anfänger nicht durch!..

Was ich sagen will: setze dir ein kleines Ziel und versuch es zu erreichen. Ziehe dazu ein gutes Fachbuch hinzu und versuche das Gelesene umzusetzen. Schau dir zu jeweiligem Thema, ganz gleich ob du es verstanden hast oder nicht, ein Video an, besser mehrere. Das öffnet einem meist die Augen. Versuche alle Bereiche des Beispiels abzudecken, sprich Logik, Grafik und Speichern. Du wirst sehen, dass ein minimalistisches Projekt von dir alles abverlangen wird.
Wenn du hier sicher und automatisiert vorgehen kannst, dann kannst du ein größeres Projekt starten und die erworbene Erfahrung darin einfließen lassen.
Ja das sind auch meine Sorgen zum Teil, von wen lerne ich was. Ich hab versucht Gelerntes umzusetzen, jedoch musste ich auch oft Google benutzen, da ich einige Sachen nicht aus dem Kopf konnte.
Es wäre nett, wenn Ihr euch das kurz anschaut und mir vielleicht Verbesserungsvorschläge machen könnt.

Es soll erstmal einfach nur ein Hintergrundbild ausgeben, ich möchte es aber zum Spiel weiterentwickeln und auch daran Gelerntes weiter umsetzen.

- Main.Java -
Java:
package rr.game.main;

public class Main
{
    /*
    * TODO : The main method!
    */
    public static void main(String[] args)
    {
        // Starts a new Thread which runs the Game class.
        Thread mainThread = new Thread(new Game());
        mainThread.start();
    }
}

Game.Java
Java:
package rr.game.main;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class Game extends JPanel implements Runnable
{ 
    /*
    * Variables and objects.
    */
    private static JFrame frame;
    public  static GraphicsDevice gd;
    private static BufferedImage background;
 
    public  static boolean isRunning;
    public  static int        screen_width;
    public  static int        screen_height;
    private static int        width;
    private static int        height;
         
    /*
    * Just the constructor.
    */
    Game()
    {
        new ImageLoader();
        initComponents();
    }
 
    // Initialized all components!
    private void initComponents()
    {
        // Initialize some variables.
        isRunning = false;
        width        = 800;
        height      = 600;
     
        // Some screen informations which can be useful later.
        gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        screen_width  = gd.getDisplayMode().getWidth();
        screen_height = gd.getDisplayMode().getHeight();
             
        // The panel.
        setPreferredSize(new Dimension(width, height));
        setBackground(Color.RED);
        setFocusable(true);
     
        // The window.
        frame = new JFrame("Frame title");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.add(this);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
     
        // Images
        background = ImageLoader.background;
             
    }
 
    // Lets draw something!
    public void drawScreen(Graphics g)
    {
        this.paintComponent(g);
        g.drawImage(background, 0, 0, this.getWidth(), this.getHeight(), null);
    }
 
    // The thread starts here.
    @Override
    public void run()
    {
        System.out.println("Thread is activated!");
        drawScreen(this.getGraphics());
        startLoop();
    }
 
    // Gameloop starts here.
    private void startLoop()
    {
        isRunning = true;
        while(isRunning)
        {
            System.out.println("Gameloop is running!");
        }
    }
 
    // Stops the Gameloop.
    public void stopLoop()
    {
        isRunning = false;
    }
}

- ImageLoader.java
Java:
import java.awt.image.BufferedImage;

import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;


public class ImageLoader
{
    public static BufferedImage background;
 
    ImageLoader()
    {
        loadImages();
    }
 
 
    private static void loadImages()
    {
        try
        {
         
            background = ImageIO.read(new File("gfx/background.png"));
            // Here you can load a lot more images!
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }
 
}

Was könnte ich besser machen? Nur damit ich mir ein Bild davon machen kann, wie Ihr euch über die Struktur Gedanken macht.
 

truesoul

Top Contributor
Hallo,

Ich gehe jetzt davon aus, dass du die Softwareentwicklung nicht nur als Hobby machst sondern auch später im Beruf.

Also ein Spiel programmieren ist schon und gut und macht auch evtl. Spaß aber das hat kaum was mit der realen Softwareentwicklung (im Unternehmen) zu tun. Außer man möchte in dieser Branche sein Geld verdienen.

Es macht viel mehr Sinn sich mit Frontend & Backend Technologien zu beschäftigen. Sprich Client zu Server Kommunikation. Es bringt kaum was, wenn man bei einem Unternehmen anfangen will und dann sagen muss: "Ich habe ein Spiel in Java programmiert". Der Lerneffekt bei solch Spielen ist eher gering.

Dann kann man auch unterschiedliche Design Pattern anwenden und lernt auch was dazu.
Zum Beispiel MVC und MVVC, MVP oder anderes.

Technologien die "einfach" zu erlernen sind, wären da z. B Spring Boot und Angular. Davon gibt es etliche Tutorials die auch dann auf Design Pattern setzen.

Ansonsten lernt man am meisten im Team mit erfahrenen Entwicklern. Da schaut man sich die gute Dinge aber und manchmal auch die schlechten :)

Grüße
 

L0oNY

Bekanntes Mitglied
Hallo,

du wirst wahrscheinlich selten feststellen, dass deine Architektur gut ist. Das ist wie auch sonst im Leben, es sagt dir keiner (kaum einer), dass du etwas richtig gemacht hast. Wenn aber etwas nicht so ist, wie es sein sollte meldet man sich schnell bei dir.

Wenn du etwas fertig programmiert hast und es läuft, dann versuche einfach die Software zu erweitern. Ein beliebiges neues Feature oder eine Erweiterung/Änderung einer beliebigen Funktion. Wenn es dir ohne größeren Aufwand gelingt, dann ist deine Architektur wahrscheinlich nicht schlecht. Wenn du wegen einer (einfachen) Funktion den Code an 10 verschiedenen Stellen anfassen musst, solltest du die Architektur überdenken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
HolyFUT Best Practice Architektur WebSocket Server Java Basics - Anfänger-Themen 1
D Erste Schritte Sinvolle Architektur und paketübergreifendes Arbeiten Java Basics - Anfänger-Themen 2
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
G Schach in Java - Allgemeine Frage zur Architektur Java Basics - Anfänger-Themen 7
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
P MVC Programm Module Architektur Java Basics - Anfänger-Themen 2
0 Frage zu Architektur: Server eines kleines Spiels Java Basics - Anfänger-Themen 4
S Hilfe! NullPointerException und Architektur Problem. Java Basics - Anfänger-Themen 3
Q Beste Komponenten für 3-Schichten-Architektur gesucht Java Basics - Anfänger-Themen 7
T Fernsteuerung mittels Sockets (Architektur okay?) Java Basics - Anfänger-Themen 4
I Kommunikation "normaler PC" mit lokaler Software an "Cloud Service" und umgekehrt Java Basics - Anfänger-Themen 15
H software entwicklung Java Basics - Anfänger-Themen 139
B Email Client in der eigenen Software einbauen Java Basics - Anfänger-Themen 3
M JDK installieren Welche Software bei XP? Java Basics - Anfänger-Themen 5
Mxxxt UML Software Java Basics - Anfänger-Themen 2
B Serial Key - Prüfung ob Software gekauft Java Basics - Anfänger-Themen 1
D Software per ssh downloaden und installieren Java Basics - Anfänger-Themen 2
A Software zum Umrechnen römischer Zahlen Java Basics - Anfänger-Themen 10
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
B Allgemein Frage zur Software Entwicklung Java Basics - Anfänger-Themen 3
OnDemand Software-Design Java Basics - Anfänger-Themen 1
B [Projekt] CyberCafé Software Java Basics - Anfänger-Themen 13
F Gültigkeitszeitraum von Software beschränken Java Basics - Anfänger-Themen 17
J Hosting Software Java Basics - Anfänger-Themen 2
A Welche UML Software benutzt ihr / ist empfehlenswert? Java Basics - Anfänger-Themen 2
F software engeneering --> dokumentation??! Java Basics - Anfänger-Themen 6
J Software problem unter VISTA Java Basics - Anfänger-Themen 3
K GUI Builder Software ? Java Basics - Anfänger-Themen 6
G Java Software Tuner Java Basics - Anfänger-Themen 6
G Versionierung von Software Java Basics - Anfänger-Themen 4
G Software Updates in Eclipse Java Basics - Anfänger-Themen 11
E software concept erstellen! Java Basics - Anfänger-Themen 4
N software die sich als hardware ausgibt? Java Basics - Anfänger-Themen 6
M Java-Software so anbieten, dass sie leicht zu starten ist Java Basics - Anfänger-Themen 16
D Java Software zeigen nichts mehr an Java Basics - Anfänger-Themen 2
A Good articles about software component technology? Java Basics - Anfänger-Themen 2
X Java Versionen und Software-Paketnamen Java Basics - Anfänger-Themen 4
N Welche software hab ich eigentlich ? Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben