¡Hola!

Soy nuevo en MVC y no sé si lo estoy haciendo bien de la forma en que trato de hacerlo, así que necesito tu ayuda.

Piense en un formulario trivial con una vista de lista (solo por ejemplo). Digamos que la vista de lista puede contener varios objetos de estudiantes. Los objetos de este estudiante consisten solo en un nombre y un número de identificación (como mencioné muy simple).

class student : IModel {
  public string Name { get; set; }
  public string IDNumber { get; set; }
}

interface IModel {
  string Name { get; set; }
  string IDNumber { get; set; }
}

Cuando uso algo como esto como mi modelo y quiero tener una Vista como se describe arriba, ¿es una buena idea encapsular mi "modelo" en algún tipo de metamodelo?

Algo así como:

//in this example the IModel definition is not part of the student class
class studentModel : IModel {
    List<student> Students { get; set; }
}

Espero que sepas lo que intento explicar.

Tengo que construir un contenedor para mi modelo para poder vincularlo a la Vista (por lo que es solo un Modelo por Vista).

Pero si lo hago así, mi objeto Student no es parte de IModel, sino el studentModel (por ejemplo, para agregar la funcionalidad Observer). Pero si esto está bien, ¿cómo debo acceder a mi objeto de estudiante en la Vista? Claro que puedo acceder al componente, pero ¿es este un buen enfoque? ¿Es mejor construir algo como un modelo en un modelo?

Estoy un poco confundido siempre que haya un objeto de estudiante en una vista, todo está bien, pero de lo contrario, a mi cerebro le falta información :)

0
Bador 29 ene. 2015 a las 03:28

2 respuestas

La mejor respuesta

No crearía una interfaz (IModel), sino solo una clase Student. Una interfaz tiene sentido (en términos generales) cuando se desea establecer un "contrato" de algún comportamiento común, que deben utilizar varios implementadores de esa interfaz.

En el lado de la vista, el modelo que la vista debería aceptar sería algo como List<Student> (observe la S mayúscula) y eso es todo.

Como nota al margen, un buen ejemplo de cuándo querría una interfaz es cuando hay alguna característica común (propiedad) o funcionalidad (método) que desea aplicar. Digamos que su sistema no solo tiene estudiantes, sino también profesores y personal administrativo. Podrías crear una interfaz IPerson con solo una Id como propiedad común obligatoria, entonces tendrías clases Student, Professor, Staff que todas implementan { {X5}} y luego todas ellas serían impuestas, por el lenguaje, para tener una propiedad Id. Y en ese caso, incluso podría crear una vista de lista, por ejemplo, de personas que su modelo es List<IPerson> (pero luego, por supuesto, tendría que hacer un casting para acceder a todas las propiedades que no sean Id ... ).

2
Ofer Zelig 29 ene. 2015 a las 00:41

Esta es una pregunta bastante amplia, pero si todo lo que desea acceder en su vista es un List<Foo>, no hay nada de malo en hacer que ese sea el tipo de modelo. No es necesario encerrarlo en algún otro objeto.

Además (como acaba de publicar Ofer) no estoy seguro de cuál es el propósito de IModel aquí. La práctica estándar es que su modelo de vista exista con el único propósito de contener los datos para una vista determinada. Una interfaz implicaría que tiene la intención de usarla para otra cosa.

Editar: si le gusta esta respuesta, acepte la de Ofer, que se publicó primero y es idéntica.

0
ChrisV 29 ene. 2015 a las 00:37