You are on page 1of 4

Objetos modelo

El trmino objeto modelo es un trmino informal, sin una definicin ampliamente


aceptada. Aqu, los objetos modelo (MO) se refieren a clases centradas en datos que
encapsulan elementos estrechamente relacionados.

Objetos modelo:

son muy comunes y se usan en casi todas las aplicaciones


son a menudo centrales para una aplicacin, ya que suelen modelar objetos de dominio
de problema
a menudo se correlaciona aproximadamente con los registros de una tabla de base de
datos correspondiente
se utilizan a menudo como valores de retorno para mtodos de objeto de acceso a
datos
se prueban fcilmente usando JUnit (o una herramienta similar)
se puede utilizar para implementar el modelo en un patrn modelo-vista-controlador

Deberan los objetos modelo seguir las convenciones JavaBeans?

No necesariamente. De hecho, algunos argumentan que el estilo de JavaBeans debe


evitarse como un modelo general para Model Objects.

Deberan los objetos modelo ser inmutables?

Dada la profunda simplicidad de los objetos inmutables , algunos prefieren disear sus Objetos
Modelo como inmutables. Sin embargo, cuando los datos subyacentes cambian, se debe crear
un nuevo objeto, en lugar de simplemente llamar a un mtodo setXXX en un objeto
existente. Algunos argumentan que esta penalizacin es demasiado alta, mientras que otros
argumentan que se trata de una micro optimizacin, especialmente en los casos en que los
datos son "ledos en su mayora", y el estado de los objetos modelo correspondientes solo
raramente cambia.

Implementar objetos modelo como inmutables parece particularmente natural en las


aplicaciones web. All, los objetos modelo se colocan con mayor frecuencia en el mbito de
la solicitud , no en el mbito de la sesin. En este caso, no existe un objeto de larga duracin
que el usuario pueda alterar directamente , por lo que el Objeto Modelo puede ser inmutable.

Ejemplo

El comentario representa un comentario publicado en un tablero de mensajes. Su


implementacin sigue el patrn Objeto inmutable . El comentario proporciona
los mtodos habituales getXXX . Tenga en cuenta que, en este caso, se
utiliza una copia defensiva para el campo Fecha. Tambin implementa
los mtodos toString , equals y hashCode .

El constructor es responsable de establecer la clase invariante , y realiza la validacin


del modelo de objeto .

paquete hirondelle.fish.main.discussion;

Importar java.util. *;
import hirondelle.web4j.model.ModelCtorException;
import hirondelle.web4j.model.ModelUtil;
import hirondelle.web4j.model.Check;
import hirondelle.web4j.security.SafeText;
import static hirondelle.web4j.util.Consts.FAILS;

Todos los derechos reservados


Comentario publicado por un usuario posiblemente annimo.
* /
clase final pblica Comentario {

Todos los derechos reservados


Constructor.

@param aUserName identifica el usuario registrado que publica el comentario.


@param aBody el comentario, debe tener contenido.
@param aFecha la fecha y la hora en que se public el mensaje.
* /
Comentario pblico (
SafeText aUserName, SafeText aBody, fecha y fecha
) lanza ModelCtorException {
fUserName = aUserName;
fBody = aBody;
fDate = aDate.getTime ();
validateState ();
}

/ ** Devuelve el nombre de usuario conectado al constructor. * /


public SafeText getUserName () {
return fUserName;
}

/ ** Devuelve el cuerpo del mensaje pasado al constructor. * /


public SafeText getBody () {
return fBody;
}

Todos los derechos reservados


Devuelve una <a href="http://www.javapractices.com/Topic15.cjp"> copia defensiva </a>
de la fecha pasada al constructor.

<P> La persona que llama puede cambiar el estado del valor devuelto, sin afectar
los elementos internos de este <tt> Comentario </ tt>. Tal copia es necesaria ya que
una {@link Date} es un objeto mutable.
* /
public Date getDate () {
// el objeto devuelto es independiente de fDate
return new Date (fDate);
}

/ ** Destinado solo a la depuracin. * /


@Override public String toString () {
return ModelUtil.toStringFor ( this );
}

@Override public boolean equals (Object aThat) {


Resultado booleano = ModelUtil.quickEquals ( this , aThat);
if (resultado == nulo ) {
Comenta que = (Comentario) aThat;
result = ModelUtil.equalsFor (
esto .getSignificantFields (), that.getSignificantFields ()
);
}
resultado de retorno ;
}

@Override public int hashCode () {


if (fHashCode == 0 ) {
fHashCode = ModelUtil.hashCodeFor (getSignificantFields ());
}
return fHashCode;
}

// PRIVATE //
private final SafeText fUserName;
final privado SafeText fBody;
/ ** Long se usa aqu en lugar de Date para garantizar inmutabilidad. * / Private final long fDate;
private int fHashCode;

Objeto privado [] getSignificantFields () {


return new Object [] {fUserName, fBody, new Date (fDate)};
}

private void validateState () lanza ModelCtorException {


ModelCtorException ex = new ModelCtorException ();
if (FAILS == Check.required (fUserName)) {
ex.add ( "El nombre de usuario debe tener contenido." );
}
if (FAILS == Check.required (fBody)) {
ex.add ( "El cuerpo del comentario debe tener contenido." );
}
if (! ex.isEmpty ()) throw ex;
}
}
addElement
public void addElement ( E anObject)
Descripcin copiado de la interfaz: MutableComboBoxModel

Agrega un elemento al final del modelo. La implementacin de este mtodo debe notificar a todos los
registrados ListDataListenerque el artculo ha sido agregado.

Especificado por:

addElement en la interfaz MutableComboBoxModel<E>


Parmetros:
anObject - el elemento a aadir

setSelectedItem
public void setSelectedItem (
Object anObject)
Establezca el valor del elemento seleccionado. El elemento seleccionado puede ser nulo.

Especificado por:

setSelectedItem en la interfaz ComboBoxModel<E>


Parmetros:
anObject - El valor del cuadro combinado o nulo para ninguna seleccin.

removeElementAt
public void removeElementAt (int index)
Descripcin copiado de la interfaz: MutableComboBoxModel

Quita un artculo en un ndice especfico. La implementacin de este mtodo debe notificar a todos los
registrados ListDataListenerque el artculo ha sido eliminado.

Especificado por:

removeElementAt en la interfaz MutableComboBoxModel<E>


Parmetros:

index - ubicacin del elemento a eliminar

DefaultComboBoxModel
public DefaultComboBoxModel ( Vector < E > v)
Construye un objeto DefaultComboBoxModel inicializado con un vector.

Parmetros:
v - un objeto vectorial ...

DefaultComboBoxModel
public DefaultComboBoxModel ()
Construye un objeto vaco DefaultComboBoxModel.
Modificador y tipo Mtodo y Descripcin

void addElement(E anObject)


Agrega un elemento al final del modelo.

E getElementAt(int index)
Devuelve el valor en el ndice especificado.

int getIndexOf(Object anObject)


Devuelve la posicin del ndice del objeto especificado en la lista.

Object getSelectedItem()
Devuelve el elemento seleccionado

int getSize()
Devuelve la longitud de la lista.

void insertElementAt(E anObject, int index)


Agrega un elemento en un ndice especfico.

void removeAllElements()
Vaca la lista

void removeElement(Object anObject)


Quita un elemento del modelo.

void removeElementAt(int index)


Elimina un elemento en un ndice especfico.

void setSelectedItem(Object anObject)


Establezca el valor del elemento seleccionado.

Mtodos heredados de la clase


javax.swing. AbstractListModel
addListDataListener, fireContentsChanged, fireIn
tervalAdded, fireIntervalRemoved, getListDataLis
teners, getListeners, removeListDataListener

You might also like