El modelo MVC nos permite separar las diferentes capas de nuestros desarrollos de una forma clara, actualmente es la arquitectura más usada por los principales lenguajes de programación para generar frameworks que nos facilitan el trabajo.
Esa es la idea de corMVC, un framework jQuery que nos implementa esta tecnología. Para ello nos ofrece window.application
con una serie de métodos para trabajar cómodamente con las diferentes capas.
Instalación
Para instalar el framework, y al estar basado en jQuery, debemos incluirlo previamente como vemos en el código:
<script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="text/javascript" src="application.js"></script>
Modo de empleo
Una vez instalado en nuestra página, podemos empezar a usar los métodos disponibles para difinir nuestro código.
Modelo
window.application.addModel((function( $, application ){
function Contact( ){
// ....
};
Contact.prototype.validate = function(){
// ....
};
return( Contact );
})( jQuery, window.application ));
En este ejemplo, vemos como podemos definir el objeto que será usado como modelo en nuestra aplicación.
Controlador
window.application.addController((function( $, application ){
function Controller(){
// Rutas que dirigen nuestras acciones
this.route( "/", this.index );
this.route( "/contacts/", this.index );
this.route( "/contacts/add/", this.addContact );
this.route( "/contacts/edit/:id", this.editContact );
this.route( "/contacts/delete/:id", this.deleteContact );
};
Controller.prototype = new application.Controller();
Controller.prototype.init = function(){
// Cargamos la vista
this.contactFormView = application.getView( "ContactForm" );
};
Controller.prototype.addContact = function( event ){
// Mostramos la vista
this.showView( this.contactFormView, event );
};
Controller.prototype.editContact = function( event, id ){
// ...
};
Controller.prototype.deleteContact = function( event, id ){
// Cargamos el modelo
application.getModel( "ContactService" ).deleteContact(
id,
function(){
application.relocateTo( "contacts" );
}
);
};
ContactService.prototype.saveContact = function(){
var self = this;
// Ajax para grabar datos
application.ajax({
url: "...",
data: {
....
},
normalizeJSON: true,
success: function( response ){
if (response.success){
// ...
} else {
// ...
}
}
});
Controller.prototype.index = function( event ){
// ...
};
Controller.prototype.showView = function( view, event ){
// ...
};
return( new Controller() );
})( jQuery, window.application ));
El controlador se encargará de redirigir nuestras acciones para interactuar con el modelo. Como podemos ver, indicamos las rutas asociadas a los métodos del controlador.
View
window.application.addView((function( $, application ){
function ContactForm(){
// Parámetros por defecto
this.form = null;
// ...
};
ContactForm.prototype.init = function(){
var self = this;
this.form = $( "#contact-form" );
this.form.submit(
function( event ){
self.submitForm();
return( false );
}
);
};
ContactForm.prototype.submitForm = function(){
var self = this;
// Obtenemos el modelo
application.getModel( "Contact" ).saveContact(
// ...
function( id ){
// Redirigimos al controlador
application.relocateTo( "contacts" );
},
function( errors ){
self.applyErrors( errors );
}
);
};
return( new ContactForm() );
})( jQuery, window.application ));
La vista, nos permitirá dirigir los datos hacia y desde el usuario.
Templates
<script id="contact-list-item-template" type="application/template">
<li>
<div>
<a>${name}</a>
</div>
<div>
<a href="javascript:void( 0 )">more</a> |
<a href="#/contacts/edit/${id}">edit</a> |
<a href="#/contacts/delete/${id}">delete</a>
</div>
<dl>
<dt>name:</dt>
<dd>${name}</dd>
<dt>phone:</dt>
<dd>${phone}</dd>
<dt>email:</dt>
<dd>${email}</dd>
</dl>
</li>
</script>
Como buen framework, nos ofrece un motor de plantillas destinado para pintar la salida que la vista nos ofrece.
Aunque a simple vista parezca un poco engorroso, los que hayan usado alguna vez el modelo MVC sabrán que este código solo ofrece ventajas a la hora de trabajar con varios desarrolladores o para organizar el código de proyectos medianamente grandes.
5 comentarios, 0 referencias
+
#