Skip to content

Instantly share code, notes, and snippets.

@zoiosilva
Created September 14, 2018 20:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zoiosilva/c11203618db8d3c6c4b1e4d4377c56ea to your computer and use it in GitHub Desktop.
Save zoiosilva/c11203618db8d3c6c4b1e4d4377c56ea to your computer and use it in GitHub Desktop.
Esqueminha rápido de entidades para uma locadora
class Video: implements {EntidadeBase}
string Título;
string Subtitulo;
{Idioma}[] IdiomasDeAudio: //pt-BR; en-US;, etc.
{Idioma}[] IdiomasDeLegenda: //pt-BR; en-US;, etc.
string[] Conteúdo:
Drama;
Comédia;
Adulto;
Pornochanchada;
Desenho oriental;
Desenho ocidental;
Documentário;
Terror;
etc.
{Midia} Mídia; //DVD, BLU-RAY, etc.
string Diretor;
string Produtora;
string Duração;
string Código de barras;
etc.
class Exemplar: implements {EntidadeBase}
{Video} Material;
string Tombo; //Número de referência interna. Normalmente é impresso em um papelzinho e colado no exemplar.
DateTime DataAquisição;
bool Bloqueado; //pode ser emprestado, ou não.
bool Emprestado; //este campo pode ser calculado ao invés de persistido.
DateTime? DataBaixa; //Quando o exemplar foi perdido, roubado, etc.
decimal Custo;
decimal ValorPersonalizadoDoEmprestimo;
class Cliente: implements {EntidadeBase}
string Nome;
string Cpf; // Para emissão de NFS-e
{Endereço} Endereço;
{Telefone} Telefone;
bool Ativo;
DateTime? DataBaixa;
class Reserva: implements {EntidadeBase}
{Cliente} Cliente;
{Video} Material;
DateTime Data;
bool ativa;
{Empréstimo} Empréstimo;
class Empréstimo: implements {EntidadeBase}
{Cliente} Cliente;
{Exemplar} Exemplar;
DateTime Data;
int Prazo; //em dias
DateTime? DataDevolucao;
bool Extraviado;
class Midia: extends {ItemSimples} implements {EntidadeBase}
class Idioma: extends {ItemSimples} implements {EntidadeBase}
abstract class ItemSimples:
string Codigo;
string Descricao;
interface EntidadeBase:
ulong Id;
DateTime DataCriacao;
DateTime DataAlteracao;
Algumas explicações:
* Fiz bem corrido, usando o estilo de entidades para mapear as classes. Usando entidades (entity framework, Hibernate, nHibernate, etc), você pode herdar os campos Id da entidadeBase;
* EntidadeBase é uma interface, porque ela pode implementar as entidades do framework que você estiver usando, ou um Mock para seus testes de unidade.
* Quando tem um '?' após o tipo, quero dizer que é um campo núlável (nullable). Pode ter ou não algum valor.
* Não estou colocando aqui classes relacionado às multas e cálculo de prazos. Fiz um esquema bem simples.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment