> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-7-la-construccion.-accediendo-a-los-datos/entidades-o-modelos-del-negocio.md).

# Entidades o modelos del Negocio (Models)

Al igual que para el modelo de datos, las entidades de negocio las definiremos creando en primer lugar una interfaz "ISchema", la cual representará el contrato que deberán cumplir todas las entidades, obligándolas así a que posean un **"Id", un título y un estado**.

La implementación la haremos usando JSON tal y como puede verse en el siguiente código:

```csharp
[JsonObject]
public interface ISchema
{
    [JsonProperty(Required = Required.Always)]
    Guid Id { get; }
    string Title { get; set; }
    bool Status { get; set; }
}
```

Las tareas y proyectos mantendrán propiedades comunes, por lo que implementaremos una clase base, "**SchemaBase**", que las agrupe y que a su vez sean observables. Para ello, nos beneficiaremos de la clase "GalaSoft.MvvmLight.**ObservableObject**" en la que delegaremos liberándonos de tener que implementar explícitamente la interfaz "INotifyPropertyChanged".

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-7cd8c301ac3774b0b53c71ed36838b86d01365dd%2Fimage18.png?alt=media)

**Figura 18.- Entidades o esquemas para Tareas y Proyectos**

El siguiente código muestra la implementación de la clase base "SchemaBase". Haremos la clase abstracta puesto que no trabajaremos con instancias de la misma.

```csharp
public abstract class SchemaBase : ObservableObject, ISchema
{
    private Guid id;
    private string title;
    private string detail;
    private Status status;
    private DateTime creationDate;
    private DateTime lastUpdate;
    public SchemaBase(Guid id)
    {
        this.id = id;
        this.Status = Schemas.Status.New;
    }
    public Guid Id { get { return this.id; } }
    // MaxLength = 75
    public string Title
    {
        get { return this.title; }
        set { Set(ref this.title, value); }
    }
    // MaxLength = 250
    public string Detail
    {
        get { return this.detail; }
        set { Set(ref this.detail, value); }
    }
    public Status Status
    {
        get { return this.status; }
        set { Set(ref this.status, value); }
    }
    public DateTime CreationDate
    {
        get { return this.creationDate; }
        set { Set(ref this.creationDate, value); }
    }
    public DateTime LastUpdate
    {
        get { return this.lastUpdate; }
        set { Set(ref this.lastUpdate, value); }
    }
}
```

De igual forma, implementaremos la entidad o esquema "Pomodoro", salvo que ésta, no heredará de "SchemaBase"­, por lo que tendrá que definir nuevamente, las propiedades *Id*, *Status* y *Title*, cumpliendo así la interfaz "ISchema".

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-69c132997c2d403812f19a11a90d5a489ebd75a4%2Fimage19.PNG?alt=media)

**Figura 19.- Entidad o esquema "Pomodoro"**

La prioridad, el estado y los tipos de tareas y proyectos, se representan a través de los enumerados: *Priority, Status, ProjectType y TaskType*:

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-633add92c9deb97c95be9162b844289c3613cea6%2Fimage20.PNG?alt=media)

**Figura 20.- Enumerados para la representación de las entidades o esquemas**

Implementado el modelo de datos y el modelo de negocio (entidades o esquemas), la estructura del proyecto "Data" queda como sigue:

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-eb977d3d47b14a2b988a599d538acebc24cf8179%2Fimage21.png?alt=media)

**Figura 21.- Proyecto Data completo**
