2012-06-07 22 views
15

Si desea obtener más información, hágamelo saber o consulte las últimas líneas de esta pregunta. Ya he leído mucho y siento que estoy convirtiendo algo simple en algo complicado y todavía me quedo atorado aquí y allá, así que tal vez puedas ayudarme en esos puntos muy específicos.¿Cómo implementar correctamente MVC en Java con Swing?

Estoy usando Netbeans IDE 7 y JDK 7, y no hay marcos. La primera ventana es un JFrame y todas las demás ventanas son JDialogs con modal = true.

Preguntas:

  1. ¿Cómo implementar correctamente el patrón MVC con el swing? De las ideas abajo ¿Cuál es mejor: (A) o (B)? O tal vez otro ... ¿Por qué es mejor?

    (A) principal:

    MyModel model 
    MyView view(model) 
    

    MyView:

    MyController(this, model) 
    

    (B)
    principal:

    MyModel model 
    MyView View 
    MyController controller(view, model) 
    
  2. cuando hago clic jbutton1 en MainFrame lo necesito para abrir SettingsFrame para la configuración de edición. ¿Dónde debería instanciar la Vista, el Modelo y el Controlador del Marco de Configuración? En MainFrame Controller?

  3. En términos de organización e implementación de MVC, ¿cómo debo manejar características más específicas que (aparentemente) carecen de una o dos de las "patas" de MVC (ya sea Modelo o Vista o Controlador)? ¿Debo crear clases vacías para ellos?

    a. The implementation of a TrayIcon 
    b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files) 
    c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file) 
    d. My own implementation of TableModel 
    e. json 
    
  4. ¿Cómo mantener y usar correctamente un objeto con los ajustes a través de toda la aplicación? Necesitaré su información en diferentes lugares (Vistas, Modelos, Controladores) pero el usuario podría alterarla durante el tiempo de ejecución). ¿Es una buena idea hacer de este modelo un singleton?

  5. ¿Qué debo hacer cuando:

    a. View needs some data from the Model? 
    What I'm doing: using the reference of Model which I keep in the View 
    b. View needs some data from the Controller? 
    What I'm doing: using the reference of Controller which I keep in the View 
    c. Model needs some data from the Controller? 
    Still didn't happen but I have no idea how to do correctly 
    d. Model needs some data from the View? 
    What I'm doing: pulling all my hair from my head... 
    e. Controller needs some data from the View? 
    What I'm doing: using the reference of the View which I keep in the Controller 
    f. Controller needs some data from the Model? 
    What I'm doing: using the reference of the Model which I keep in the Controller 
    g. One of FooModel, FooView or FooController needs data from one of BarModel, BarView or BarController? 
    What I'm doing: thinking of jumping from the highest building... 
    
  6. ¿Alguna pista sobre la forma de saber si he implementado correctamente MVC? ¿Debería procesar datos masivos en Modelo o Controlador?

  7. También estoy usando un DAO, lo que estoy haciendo es: Mi modelo tiene una carga MyModel

    ArrayList()

    método que crea una instancia de la DAO y devuelve ArrayList de los Modelos devueltos por DAO, y luego a veces proceso este ArrayList de Modelos en el Modelo y, a veces, permito que el Controlador lo procese. ¿Es esta una buena práctica o hay una mejor manera? Por proceso quiero decir: iterar a través de ArrayList y obtener los datos de los modelos.

  8. Tengo una contraseña Compruebe jDialog para restringir el acceso a algunas Vistas.¿Cómo puedo reutilizarlo en términos de MVC, para que pueda usar el mismo diálogo de PasswordCheck para permitir/restringir el acceso a diferentes Vistas sin hacer un lío en el código?

  9. ¿Algún otro consejo, sugerencia, sugerencia o sugerencia?

Contexto: estoy obligado a desarrollar un software de Java swing MVC en un corto período de tiempo, aunque por defecto no soy un desarrollador de Java y que no se utilicen para implementar el patrón MVC, especialmente en Java (entiendo la idea pero a veces me falta conocimiento para implementar la relación entre clases). Las aplicaciones son básicamente un monitor para archivos locales/en línea con una JTable en el marco principal para mostrar estos datos. Estoy usando la nueva API WatchService para hacer un seguimiento de los archivos locales y guardar su información en una base de datos h2 usando un DAO, y ellos vuelven a cargar esta información en el marco principal jtable. También debo notificar al usuario sobre nuevos archivos (que para estoy usando TrayIcon). Para la supervisión/carga/descarga de archivos en línea, estoy usando HttpsUrlConnection y json. También puede permitir la personalización de la configuración.

Gracias de antemano por su tiempo y ayuda.

Respuesta

7

Eche un vistazo a Sun's (Oracle's) suggestions.

Como simplificación, puede hacer que cada componente (modelo, vista, controlador) se registre con un componente de aplicación de nivel superior para proporcionar un único punto de referencia en lugar de referencias individuales entre cada componente (su A o B). El artículo que cito proporciona ideas para el diseño de empujar y tirar; Recomiendo empujar como un enfoque moderno más popular. Divulgación: Tengo experiencia con Java y MVC pero no con MVC en Swing per se.

¿dónde debo instanciar la Vista, el Modelo y el Controlador de el Cuadro de ajustes?

Claro, sí, o en un componente de aplicación de nivel superior.

¿Cómo debo administrar funciones más específicas que (aparentemente) carece de uno o dos de las "patas" de MVC (Modelo, ya sea o Vista o controlador)?

Implementaré piezas solo GUI como su propia biblioteca GUI. Y puramente algoritmo/piezas de servicio como una biblioteca de servicios.

¿Debo procesar datos masivos en Modelo o Controlador?

Algoritmos de procesamiento de datos encajarían muy bien en un controlador o incluso biblioteca de servicio; su modelo no debe hacer mucho procesamiento, más allá de la posible conversión o validación del tipo de datos.

¿Cómo mantener y usar correctamente un objeto con ajustes a través de toda la aplicación?

Ver mi nota en el registro; un singleton puede ser apropiado.

+0

+1, me gusta la idea presentada tanto como me gustó el enlace, me ayudará también con mis esfuerzos :-) +1 a la pregunta también, muy bien explicado, fui el primero en votar a la vez: -) –

+0

Gracias por la respuesta.¿A qué te refieres con "ver mi nota en el registro"? He visto sugerencia de soles antes, pero, ya que lo recomendó, lo leeré de nuevo más de cerca y con cuidado, y trataré de resolver mis dudas. Yo también lo voté. – dcr

+4

+1 Consulte también este [ejemplo] (http://stackoverflow.com/a/3072979/230513), que sigue un [outline] (http://stackoverflow.com/a/2687871/230513) similar al diagrama citado. – trashgod

Cuestiones relacionadas