T
TheMole
Gast
Hallo,
ich muss mich nochmal melden, wenn ich das im alten Thread gestellt hätte, wäre es vielleicht untergegangen und es wäre wichtig für mich. Daher wäre ich dankbar wenn sich mal jemand melden könnte und kurz seinen kompeteten Senf dazu gibt: Zuerst muss ich ein bisschen viel Code posten:
http://www.java-forum.org/de/topic58433_frage-interface-guter-programmierstil.html
und die Fragen sind auch konkret:
- Ist es sinnvoll, Die zustäzlichen Methoden der Klassen ElementDataImplxxx auch in das interface zu nehmen, auch
wenn die nicht von allen erbenden Klassen gebraucht werden?
- Ist es möglich eine einzige View für alle 3 Modelklassen zu definieren, anstatt für jede Modelklasse eine eigene View (für die Darstellung werden ja JLabels verwendet, davon werden in einer View graphics methoden benötigt, insgesamt sind die Views , auch wenn alle gemeinsame Daten haben, sehr unterschiedlich, so dass hier in einer ViewKlasse wohl viel Code nötige wäre...?)
- Allgemein: Wie ist dieser Ansatz, was kann man besser machen ?
Bitte es wäre sehr wichtig, für sinnvolle Antworten überweise ich eine Spende für das Forum
ich muss mich nochmal melden, wenn ich das im alten Thread gestellt hätte, wäre es vielleicht untergegangen und es wäre wichtig für mich. Daher wäre ich dankbar wenn sich mal jemand melden könnte und kurz seinen kompeteten Senf dazu gibt: Zuerst muss ich ein bisschen viel Code posten:
http://www.java-forum.org/de/topic58433_frage-interface-guter-programmierstil.html
und die Fragen sind auch konkret:
- Ist es sinnvoll, Die zustäzlichen Methoden der Klassen ElementDataImplxxx auch in das interface zu nehmen, auch
wenn die nicht von allen erbenden Klassen gebraucht werden?
- Ist es möglich eine einzige View für alle 3 Modelklassen zu definieren, anstatt für jede Modelklasse eine eigene View (für die Darstellung werden ja JLabels verwendet, davon werden in einer View graphics methoden benötigt, insgesamt sind die Views , auch wenn alle gemeinsame Daten haben, sehr unterschiedlich, so dass hier in einer ViewKlasse wohl viel Code nötige wäre...?)
- Allgemein: Wie ist dieser Ansatz, was kann man besser machen ?
Bitte es wäre sehr wichtig, für sinnvolle Antworten überweise ich eine Spende für das Forum
Code:
package mvc;
import java.awt.Graphics;
import javax.swing.JLabel;
/**
*
* interface mit gemeinsamen methoden für die Klassen ElementDataImplxxxx
*
*/
public interface ElementData {
void setA(int a);
int getA();
void setB(int b);
int getB();
void setC(int c);
int getC();
void setD();
int getD();
}
/**
*
* abstrakte Oberklasse für gemeinsame Felder
*
*/
public abstract class ElementDataImpl implements ElementData {
int a, b, c, d;
public ElementDataImpl(int a, int b, int c, int d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
public int getA() {
return 0;
}
public int getB() {
return 0;
}
public int getC() {
return 0;
}
public int getD() {
return 0;
}
public void setA(int a) {}
public void setB(int b) {}
public void setC(int c) {}
public void setD() {}
}
/**
*
* Datenhalter Klassen
*
*/
public class ElementDataImplExtended1 extends ElementDataImpl {
private String additionalField1;
public ElementDataImplExtended1(int a, int b, int c, int d, String newField) {
super(a,b,c,d);
setAdditionalField1(newField);
}
public String getAdditionalField1() {
return additionalField1;
}
public void setAdditionalField1(String additionalField1) {
this.additionalField1 = additionalField1;
}
}
public class ElementDataImplExtended2 extends ElementDataImpl {
private String additionalField1;
private boolean additionalField2;
public ElementDataImplExtended2(int a, int b, int c, int d, String newField, boolean newValue) {
super(a,b,c,d);
setAdditionalField1(additionalField1);
setAdditionalField2(newValue);
}
public String getAdditionalField1() {
return additionalField1;
}
public void setAdditionalField1(String additionalField1) {
this.additionalField1 = additionalField1;
}
public boolean isAdditionalField2() {
return additionalField2;
}
public void setAdditionalField2(boolean additionalField2) {
this.additionalField2 = additionalField2;
}
}
public class ElementDataImplExtended3 extends ElementDataImpl {
private byte[] newField;
public ElementDataImplExtended3 (int a, int b, int c, int d, byte[] newField) {
super(a,b,c,d);
setNewField(newField);
}
public byte[] getNewField() {
return newField;
}
public void setNewField(byte[] newField) {
this.newField = newField;
}
}
/**
*
* View Klassen
*
*/
public class ElementDataImplExtended1View extends JLabel {
private ElementDataImplExtended1 data;
public ElementDataImplExtended1View(ElementDataImplExtended1 data){
this.data = data;
}
public ElementData getData() {
return data;
}
public void setData(ElementDataImplExtended1 data) {
this.data = data;
}
/**
* additional code
*/
public void paintComponent(Graphics g){
//some action
}
}
public class ElementDataImplExtended2View extends JLabel {
private ElementDataImplExtended2 data;
private JLabel otherLabel = new JLabel();
public ElementDataImplExtended2View(ElementDataImplExtended2 data){
this.data = data;
//some actions
}
public ElementData getData() {
return data;
}
public void setData(ElementDataImplExtended2 data) {
this.data = data;
}
}
public class ElementDataImplExtended3View extends JLabel {
private ElementDataImplExtended3 data;
public ElementDataImplExtended3View(ElementDataImplExtended3 data){
this.data = data;
//to something with the data
}
public ElementData getData() {
return data;
}
public void setData(ElementDataImplExtended3 data) {
this.data = data;
}
}