static void Main() { // Estas líneas las crea Visual Studio por defecto y sirven para configurar // el entorno de ejecución Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // Creamos una conexión con la fuente de datos. //ICharacterDataSource dataSource = new CharacterDataSourceJson(); IKernel kernel = new StandardKernel(new CacheMRUModule(2)); ICharacterDataSource dataSource = kernel.Get<ICharacterDataSource>(); // Creamos la clase que se encarga de controlar MultiWindowRunner runner = new MultiWindowRunner(); // Creamos tantas ventanas principales como deseemos, pasándole como parámetros las // dependencias con la fuente de datos, la clase que se encarga de controlar y // el título de la ventana. La aplicación real sólo contendría una ventana principal. // Crear varias ventanas sirve para simular el acceso a la fuente de datos desde // diversos clientes, caso en el cual cada cliente contendría una ventana principal // que se conectaría con una única fuente de datos. // // Para la primera parte de la práctica, donde se trata de reducir el número de objetos // creados por cada petición, se puede trabajar perfectamente con una única ventana // // Para la segunda parte de la práctica, donde se introduce una caché para intentar // reducir el número de accesos a la fuente de datos, se pueden crear varias ventanas // para simular la ejecución de varios clientes en paralelo createCharacterDescriptionWindow(dataSource, runner, "Descriptor de Personsajes - Izquierdo"); createCharacterDescriptionWindow(dataSource, runner, "Descriptor de Personsajes - Derecho"); // Mostramos los formulrios e iniciamos la aplicación runner.run(); }
/// <summary> /// Crea una nueva ventana 'Descripción de Personajes'. /// Esta ventana representa la interfaz principal de la aplicación. /// </summary> /// <param name="dataSource"> /// Instancia del objeto que proporciona el acceso a la fuente de datos que contiene /// la descripción de los personajes. /// </param> /// <param name="runner"> /// Instancia del objeto que se encarga de controlar que la aplicación se cierre cuando /// se cierren los distintos formularios que se hayan creado. /// </param> /// <param name="title"> /// Título de la ventana. /// </param> /// <returns> /// El objeto ventana 'Descripción de Personajes' creado. /// </returns> /// <pre>(dataSource != null) && (runner != null)</pre> /// <post>(returnValue != null)</post> private static MainWindow createCharacterDescriptionWindow(ICharacterDataSource dataSource, MultiWindowRunner runner, string title) { // Creamos un objeto ventana "Descriptor de Personajes", // y le inyectamos la dependencia con la fuente de datos // y con la clase que se encarga de controlar la ejecución de los formularios // MainWindow window = new MainWindow(dataSource, runner); // Le damos nombre a la ventana window.Text = title; return window; }