Introducción al Desarrollo de Aplicaciones con Groovy y Grails (Parte 2)

May 31, 2009 – 8:23 am
Tags: , ,

Creando una Clase del Dominio del Problema

Para nuestro ejemplo vamos a crear los siguientes modelos de dominio: Project, Component, and Issue.
La clase “Project” que representa el proyecto de software para el cual vamos a registrar incidencias (Bugs).
Un Project puede tener uno o más Componentes (Ejm: gui, documentación, etc)
Un Componente solo está asociado a un proyecto y puede tener cero o más Issues asociados.
Un objeto Issue está asociado a un Componente.

Con el siguiente comando creamos la entidad Project:

>  D:\dev\issuetracker>grails create-domain-class  Project

Si el comando se ejecuta satisfactoriamente debería obtenerse una respuesta similar a la
siguiente:

>  Welcome to Grails 1.1.1 – http://grails.org/
>  Licensed under Apache Standard License 2.0
>  Grails home is set to: C:\dev\grails-1.1.1
>  Base Directory: D:\dev\issuetracker
>  Running script C:\dev\grails-1.1.1\scripts\CreateDomainClass.groovy
>  Environment set to development
>  Created DomainClass for Project
>  Created Tests for Project

grails automáticamente crea el archivo    %PROJECT_HOME%\grails-app\domain\Project.groovy     con la siguiente estructura

1
2
3
4
class Project {
 
static constraints = {}
}

Qué es una Clase de Dominio?

Una clase de dominio es un artefacto persistente para el cual todas sus propiedades  son persistidas
en la base de datos (Más información en  GORM http://www.grails.org/GORM (Grails Object Relational Mapping) )

Para nuestro ejemplo editamos el archivo Project.groovy de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Project {
  // relaciones
  static hasMany = [components: Component]
 
// campos
String name
 
String toString() {
return name
}
 
// restricciones
static constraints = {
name()
components()
}
}

Como se puede ver en la clase Project, por lo general una clase de dominio de GORM se compone de relaciones con otras entidades,
campos (Columnas en la base de datos), y restricciones.

Para nuestro sistema de ejemplo debemos crear también las clases de dominio Issue y Component:

>  D:\dev\issuetracker>grails create-domain-class  Component
>  D:\dev\issuetracker>grails create-domain-class  Issue

y las editamos de la siguiente forma:

Component.groovy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Component {
// relationships
static belongsTo = Project
static hasMany = [issues: Issue]
 
// fields
Project project
String name
 
// override for nice display
String toString() {
return${project} - ${name}}
 
// constraints
static def constraints = {
//’empty’ constraints
//garantizan el orden como apareceran los campos en la forma
name()
project()
issues()
}
}

Issue.groovy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Issue {
// relationships
static belongsTo = Component
 
// fields
Component component
String type
String submitter
String description
String status =NewInteger bounty
Date dateCreated
Date lastUpdated
 
// constraints
static constraints = {
component()
//restringe una lista de valores
type(inList: ["Defect", "Feature"])
submitter()
 
description(size: 0..5000)
status(inList: ["New", "Accepted", "Closed", "Won't Fix"])
bounty(range:0..12)
}
}

En los siguientes enlaces puede encontrarse información mucho más detallada sobre el funcionamiento de GORM:
Mapeo de Entidades: http://www.grails.org/GORM+-+Mapping+DSL
Relaciones: http://www.grails.org/GORM+-+Defining+relationships
Colecciones: http://www.grails.org/GORM+-+Collection+Types
Operaciones de Crud: http://www.grails.org/GORM+-+CRUD

Creación de Datos de Prueba

Muchas veces se requieren datos de ejemplo para realizar pruebas al sistema.
Grails nos permite la creación inicial de datos de la siguiente forma:

Ubicar el archivo    %PROJECT_HOME%\grails-app\conf\BootStrap.groovy   y modificarlo de la siguiente forma:

class BootStrap {

def init = { servletContext ->
// Create some test data
new Project(name:”Widget para Facebook”).save()
new Project(name:”Simple Issue Tracker”).save()
new Project(name:”Extensión para Openlayers”).save()
}
def destroy = {
}
}

En este ejemplo creamos tres objetos Project como datos de prueba.

Creación de Controladores y Vistas

Dado que ya disponemos de nuestras clases de dominio, podemos ejecutar los siguientes comandos que se
encargarán de generar los controladores y vistas para nuestras entidades:

>D:\dev\issuetracker>grails generate-all Project
>D:\dev\issuetracker>grails generate-all Component
>D:\dev\issuetracker>grails generate-all Issue

El comando generate-all genera el código necesario para habilitar el CRUD de las entidades Project, Component e Issue.

Para ejecutar la aplicación podemos utilizar el comando:

> D:\dev\issuetracker>grails run-app

Una vez  se ha inicializado el servidor, puede ingresar a la aplicación a través del siguiente url:  http://localhost:8080/issuetracker

En la pantalla de inicio podrá ver lo siguiente:

Si selecciona la opción ProjectController podrá ver el listado de los proyectos:

A continuación la pantalla donde se muestra el detalle de un Component:

Si desea crear un nuevo Issue, grails ha generado para usted la siguiente pantalla:

Nótese que con muy poco esfuerzo hemos logrado crear una aplicación completa de CRUD para administrar nuestras entidades Project, Component e Issue.  En las siguientes partes del tutorial se incluirán  funcionalidades adicionales y personalización de la visualización.

Puede descargar el código completo de la parte 2 desde esta ubicación

  • Share/Bookmark

Post a Comment