Anwendung des MVC Konzepts

Status
Nicht offen für weitere Antworten.

maxth

Aktives Mitglied
Hallo,

ich bin gerade dabei ein Programm zuschreiben nach dem MVC Konzept. Dabei habe ich einige Fragen. In meinem Model habe ich eine Arraylist mit Werten die aus einer Datenbank kommen. Dieser Werte möchte ich später in meinem Programm, im IE und in einem PDF angezeigt bekommen. Wie koordiniere ich das mit dem Controller. Ich hab keinerlei Erfahrung mit Controllern, aber das Konzept bietet mir die besten Möglichkeiten.

Ich hoffe mir kann vielleicht jemand einen Denkanstoß geben oder vielleicht sogar einen Ansatz.

Vielen Dank im vorraus.
 
Hier ist meine Model Klasse.

Vermieter

Java:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
 

 
public class Vermieter {
    
    String s;
    ArrayList VermieterListe = new ArrayList();

    Verbindung vb = new Verbindung();
    
  

    
    public Vermieter() {
        
        vb.verbinden();
       
            	 
             s = "SELECT * FROM vermieter";
             
             ResultSet r =  vb.execSql(s);
             
             try {
				while(r.next()) {
				  // System.out.println("ID : " + r.getString(1));
					int z = 0;
					 z = z + 1; 
					 
					VermieterListe.add(z + ". Wohnung"); 
					
				   VermieterListe.add(r.getString(1));
				   
				   VermieterListe.add(r.getString(2));
				 
				 }
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
               
               System.out.println(VermieterListe);
              
            
        
  
       
    }
 
    
}

VermieterController KLasse

Java:
public class VermieterController {
	
	Vermieter vermieter = new Vermieter();
	
	
	public VermieterController(){
		
		
		
	}
	
		
	}

um mal ein bisschen konkreter zu werden, ich weiß nicht genau wie die Controller Klasse aufgebaut ist und wie sie genau funktioniert. Über die Aufgabe des Controllers bin ich mir im klaren.
Der Benutzer soll später im Programm die Möglichkeit haben, die Datenbankinhalte im Programm angezeigt bekommen und im IE oder PDF so als zusatz features.

Mit GUIs habe ich schon gearbeitet da werde ich nicht so viele Probleme bekommen, aber dieser Controller:bahnhof:;(
 
ich weiß nicht genau wie die Controller Klasse aufgebaut ist und wie sie genau funktioniert
Den Aufbau musst Du festlegen, abhängig davon was der Controller machen soll. Wie der Name schon sagt dient der Controller zum Steuern.
Ein konkretes Beispiel wäre:
Du hast eine GUI mit Liste und Buttons als View, welche spezielle Models darstellen kann, Dein VermieterModel entspricht dieser Art des Models (z.B. aufgrund von Vererbung/Implementierung). Dann hast Du einen Controller, beim Starten erzeugt er eine Instanz des Vermietermodels und eine Instanz der GUI, ausserdem teilt er der GUI mit, dass sie die Instanz des Vermietermodels darstellen soll. Wenn jetzt ein Anwender einen Eintrag der Liste selektiert und auf den Löschen-Button drückt, empfängt der Controller diese Aktion und ruft dann die löscheEintrag(xy) Methode auf dem Model aus.
 
Danke für deine Antwort.


Jetzt komme ich zu dem Problem das MVC in der PRaxis anzuwenden.

Jetzt habe ich ein View geschrieben und ein Model, und in dem VIEW soll jetzt ein Eintrag gelöscht werden, ich habe es mal probiert, aber alles andere als nach dem MVC Konzept.

Vielleicht könnt ihr mir helfen und zeigen wie das aussehen soll.

Model
Java:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
 

 
public class WohnungErsteller   {
    
    String s;
   

   ArrayList<Wohnung> list = new ArrayList<Wohnung>();

    Verbindung vb = new Verbindung();
    
  
    
    public WohnungErsteller() {
        
        vb.verbinden();
       
    int counter = 0;

             s = "SELECT * FROM vermieter";
             
             ResultSet r =  vb.execSql(s);
             
             try {
				while(r.next()) {
				  
					//counter++;
					
					//System.out.print(r.getString(1));
					
					list.add(new Wohnung("ID: " + r.getString(1) ,"Wohnung: " + r.getString(1), "Name: " + r.getString(2)));
					//list.add(new Wohnung("Villa", "Peter"));
					
			
					
				
				 }
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
			
           
            
    }
 
    public String getWohnung(){
		
    	return s;
    	
    	
    }
    
}

View

Java:
import java.awt.*;
import java.awt.event.*;
import java.sql.ResultSet;
import java.util.ArrayList;
 
import javax.swing.*;
 
public class WohnungAnzeigen extends JFrame {
    Verbindung vb = new Verbindung();
    WohnungErsteller wohnung = new WohnungErsteller(); //Klasse der Arraylist
    //ArrayList<Wohnung> list = new ArrayList<Wohnung>();
    
    int counter = 0;
    
    
	
    private JTextField textField1;
    private JTextField textField2;
    private JTextField textField3;
    
    
    private JButton next;
    private JButton back;
    private JButton loeschen;
    private JButton aendern;
    
    
    public WohnungAnzeigen() {
    	super("Anzeige");
        this.setLayout(new GridLayout(3, 1));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(0, 0, 300, 200);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setLocationRelativeTo(null);
        
        textField1 = new JTextField();
        textField2 = new JTextField();
        textField3 = new JTextField();
        
    	
    	
    
        
        next = new JButton("Next");
        next.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
             showNext();
             
            }
        });
        
        back = new JButton("Back");
        back.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	showLast();
            	
            	
            }
        });
        
        
        aendern = new JButton("edit");
        aendern.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            }
        });
        
        
        loeschen = new JButton("delete");
        loeschen.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	deleteCurrent();
            }
        });
        
        
        this.getContentPane().add(textField1);
        this.getContentPane().add(textField2);
        this.getContentPane().add(textField3);
        //this.getContentPane().add(transferButton);
        this.getContentPane().add(back);
        this.getContentPane().add(next);
        this.getContentPane().add(aendern);
        this.getContentPane().add(loeschen);
    }
	
    
    public void showNext() {
	    
		counter++;
		
	    if (counter>=wohnung.list.size()) counter = 0;
	    textField1.setText(wohnung.list.get(counter).getName());
	    textField2.setText(wohnung.list.get(counter).getMieterName());
	    textField3.setText(wohnung.list.get(counter).getID());
	
}
    public void deleteCurrent(){
    	
    	String d;
    	String s; 
    	
    	d = (wohnung.list.get(counter).getID());
    	vb.verbinden();
    	
    	s = "DELETE FROM `mkb`.`vermieter` WHERE `vermieter`.`ID` =" + d;
    	 
    	
    	
    	 
    	
    	
    }
  public void showLast() {
	    
		counter--;
		
	    if (counter>=wohnung.list.size()) counter = 0;
	    textField1.setText(wohnung.list.get(counter).getName());
	    textField2.setText(wohnung.list.get(counter).getMieterName());
	
	
}
    
    public static void main(String[] args) {
        new WohnungAnzeigen().setVisible(true);
    }
}

Vielen Dank im vorraus für eure Hilfe.
 
Hier ist meine Model Klasse.
das ist keine Model klasse... du hast logik ueber die SQL befehle drin.

Java:
public class WohnungErsteller   {   
    private String s;
    private List<Wohnung> list = new ArrayList<Wohnung>();

   // getter und vll setter hoechstens
}
das waere eine Modelklasse (wobei der Name mehr nach Controller klingt... ?!)

das befuellen der Daten ist sache des controllers - damit hat das Model bzw auch die View gar nix zu tun
 
Okay, also ist mein vorhin gedachtes model eher ein Controller,
kann man den als Controller lassen oder muss da noch mehr geändert werden.

Ich hab ja noch eine Klasse die "WohnungsObjekte" erstellt, würde dies heißen dass das meine Model KLasse wär oder wie?

Model
Java:
public class Wohnung {
	
	
    private String name;
    private String mieter;
    private String id;
    
    
    
    public Wohnung( String id, String name, String mieterName) {
        
    	this.name = name;
        this.mieter = mieterName;
        this.id = id;
       
    }
    
    public Wohnung() {
		// TODO Auto-generated constructor stub
	}

	public String getName() {
        return name;
    }
    
    public String getMieterName() {
        return mieter;
    }
    
    public String getID() {
        return id;
    } 
   

}
 
Ich hab ja noch eine Klasse die "WohnungsObjekte" erstellt, würde dies heißen dass das meine Model KLasse wär oder wie?
genau. ModelKlassen sind im Objektgraph ganz unten, also Blaetter... heisst sie erzeugen keine weiteren Objekte / Strukturen sondern speichern nur und bieten sie moegl. an
 
genau. ModelKlassen sind im Objektgraph ganz unten, also Blaetter... heisst sie erzeugen keine weiteren Objekte / Strukturen sondern speichern nur und bieten sie moegl. an

Das ist streng-genommen falsch. Das Model im MVC-Konzept stammt aus dem Business-Logic Layer und kann allen möglichen Schund tun.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben