Jó-e így az MVC megvalósításom?

Fórumok

Ezelőtt MVC-t csak webes oldalon volt alkalmam megismerni, ez alapján nekem abszolút érthető és logikus, amit csináltam, de attól félek, hogy valami nagy bakit követtem el, leegyszerűsített kód:

controller/Application.java:


package controller;
import org.eclipse.swt.widgets.Display;
public class Application {
	public static Display display = new Display();
	public static void main(String args[]) {
		controller.MainWindow mainWindow = new controller.MainWindow("Valami");
		mainWindow.run();
	}
}

controller/MainWindow.java:


package controller;
import org.eclipse.swt.SWT;
// AbstractController-ben még nincs sokminden
public class MainWindow extends AbstractController {
	private view.MainWindow mainWindow;
	public MainWindow(String title) {
		mainWindow = new view.MainWindow(title);
		mainWindow.run(this);
	}
	public void control() {
		mainWindow.ujUgyfelButton.addListener(SWT.Selection, new Listener() {
			public void handleEvent(Event event) {
				ujUgyfelButtonClick(event);
			}
		});
		// A többi Event ugyanígy regisztrálva
	}

view/AbstractWindow.java:


package view;
import org.eclipse.swt.widgets.Display;
public abstract class AbstractWindow {
	protected String title;
	public AbstractWindow(String title) {
		this.title = title;
	}
	// A többi osztály itt adja hozzá az SWT elemeket
	protected abstract void createContents(Shell shell);
	public void run(AbstractController controller) {
	    Shell shell = new Shell(Application.display);
	    shell.setText(title);
	    createContents(shell);
	    controller.control();
	    shell.open();
	    while (!shell.isDisposed()) {
	      if (!Application.display.readAndDispatch()) {
	    	  Application.display.sleep();
	      }
	    }
	    Application.display.dispose();
	}
}

Ahol szerintem gáz van, az a public static Display display rész, de nem enged minden controllerben új Displayt létrehozni én viszont szeretném elkülöníteni a vezérlő részeket az ablak grafikus részétől. Tudom, hogy desktop MVC-nél ezt máshogy szokás, csak annyi kérdésem van, hogy nem futottam-e bele valami fatális hibába?

Hozzászólások

Hahó!

,,Ahol szerintem gáz van, az a public static Display display rész, de nem enged minden controllerben új Displayt létrehozni én viszont szeretném elkülöníteni a vezérlő részeket az ablak grafikus részétől. ''

Valóban, a static kulcsszó miatt -- ami osztályszintű változót jelent, amelyet az osztály tárol -- a display változódból pontosan egy darab jön létre, függetlenül attól hogy mennyi Application példányt hoztál létre.

Ha minden egyes Application-hoz külön display értéket szeretnél, akkor a static kulcsszót el kell abból a sorból távolítanod, mert ekkor minden egyes Application-hoz létrejön a saját display érték.

G.
============================================
"Share what you know. Learn what you don't."

A Displaynak van egy statikus getCurrent() metodusa, amivel az aktualis szalhoz tartozo peldanyt el tudod kerni. Nezd meg a javadocot.