Architektur von Programmen



  • Hallo, ich habe lange Zeit mit der MFC programmiert, dort gibt es eine Dokument – Ansicht Architektur, so das Daten und die Ansicht streng getrennt sind.
    Dieses Konzept finde ich eigentlich sehr gut, nun habe ich probiert mit Java eine solche Architektur nachzubilden.

    Hier erst mal der Code:

    public class Terminplaner
    {
        public static void main(String[] args) {
            Document document = new Document();
            WeakView weakView = new WeakView();
            MainFrame mainFrame = new MainFrame(document, weakView);
            weakView.create(document);
            document.newDocument(mainFrame);
    
            mainFrame.showWindow();
        }
    }
    
    class MainFrame
    extends JFrame
    {
        private WeakView weakView = null;
        private Document document = null;
    
        public MainFrame(Document document, WeakView weakView)
        {
            this.weakView = weakView;
            this.document = document;
    
            this.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                        destroyWindow();
                    } 
                 } );
    
            setBounds(100,100,200,200)
            this.setResizable(false);
    
        }   
    
        public void showWindow()
        {
            Container con = getContentPane();
            con.add(weakView);
    
            setVisible(true);
        }
    
        private void destroyWindow() {
            System.exit(0);
        }
    }
    
    class Document
    implements ActionListener
    {
        MainFrame mainFrame = null;
    
        public Document() {
        }
    
         public void actionPerformed(ActionEvent event) {
            }
    
         }
    
         public void newDocument(MainFrame frame) {
            mainFrame = frame;
    
            updateView(null);
         }
    
         public void updateView(IView view) {
            if (view != null)
                view.update();
            else {
                // Alle Ansichten aktualisieren
            }
         }
    
    }
    
    class WeakView
    extends JPanel
    implements IView
    {
        private Document document = null;
    
        public WeakView() {
        }
    
        public void update() {
    
        }   
    
        public void create(Document doc) {
            document = doc; 
    
        }
    
    }
    
    interface IView
    {
        void update();
        void create(Document doc);
    }
    

    Erläuterung: Terminplaner ist die Haupt Klasse mit der Main Methode.
    MainFrame -> Ist der Frame, dort werden Toolbar, Menü, Statusbar und die View(s) hinzugefügt.
    Document -> Beinhaltet die Daten, dort werden die Aktionen bearbeitet. Zeiger auf MainFrame ist nötig z.B Aufruf eines Dialoges.
    View -> Die Daten werden gezeigt. In der Create Methode wird die Oberfläche zusammen gebastelt. Elemente z.B Jbutton but.addActionListener(document)
    Update Methode die Daten werden auf der Oberfläche neu angezeigt wird von Document aufgerufen wenn sich die Daten verändert haben.

    Ok die MFC ist alt, aber das System finde ich echt gut. Wie baut ihr euere Java Programme zusammen?

    Ein Frame beinhaltet alles? Daten und Ansicht ?



  • Dass Daten und Ansicht voneinander getrennt wreden ist eigentlich auch in Java gang und gebe ... allerdings kann es schon auch einmal vorkommen, dass bestimmte Daten im Frame selbst abgelegt werden - wenn auch nur temporär. Ich persönlich halte mir auch immer stupid DataClasses (Container eben) in denen Daten vom bestimmten Typ stehen. Abgelegt sind diese meist in einem XML-File.



  • sieht deine Struktur etwa so aus: ??
    Wo wird der ActionListener implementiert ?
    class Document extends Object
    {
    private String name;
    private int age;

    public String getName() { return name; }
    public int getAge() { return age; }

    public Document() {

    }
    }

    class MainFrame extends JFrame
    implements ActionListener
    {
    private Document doc = null;

    public MainFrame(Document doc) {
    this.doc = doc;

    txtField.setText(doc.getName());
    }

    public void actionPerformed(ActionEvent event) {
    String message = event.getActionCommand();
    }
    }



  • Der Code ist ja nebensächlich ... wenn wir von Schlüsselwörtern reden wollen dann lautet es hier MVC. Dies ist bekannt und wird auch so fortgesetzt. Neue Techniken etc. werden kaum eine Bedeutung finden 🙂

    Deine Frage mit den Listenern verstehe ich nicht ... alles was mit Logik zu tun hat wird in der View gehandhabt und wenn es das Document betrifft entsprechend weitergeleitet.

    Quasi so:

    DocumentManager besitzt 1..n Documente
    Programm besitzt 1..n Views
    Jede View zeigt via DocumentManager auf genau ein Document (per Schlüssel)
    View nutzt DocumentManager um Daten im Document zu manipulieren
    Speicherung etc. mach ausschließlich der DocumentManager

    [ Dieser Beitrag wurde am 06.02.2003 um 10:15 Uhr von CengizS editiert. ]


Anmelden zum Antworten