Diagrama de Classes - msfernandes/busine.me GitHub Wiki

###Models

images/class-diagram.png

Padrões GRASP

Alta Coesão e Baixo Acoplamento:

Nós tentamos projetar nosso diagrama de classe para ser o mais separados possível, com novas entidades para quase todos os substantivos que encontramos. Fazendo isso nós mantemos nossos objetos focado, gerenciável e compreensível.

Isso ajuda com o padrão de baixo acoplamento, bem como, embora o nosso projeto tenha alguns acoplamento devido à semântica do sistema.

Exemplos disso são a classe "Companhia", que poderia ser um atributo de uma linha de ônibus, mas decidimos torná-la uma entidade, a classe "ReviewType" que poderia ser um atributo da revisão e etc.

Indireção:

Exemplos do padrão indireção podem ser visto nas relações entre "BusinemeUser" - "Review" - "ReviewType", e também em "BusinemeUser" - "Favorite" - "Busline". Delegando um mediador de responsabilidade também ajuda a suportar baixo acoplamento e coesão.

Especialista na informação:

Nosso maior exemplo de Especialista na Informação é a classe "Pos"t que manipula a informação e métodos relacionados com a postagens feitas por um Usuário sobre uma linha de ônibus. Sua informações e métodos poderia estar dentro da classe "Busline", mas isso iria diminuir a coesão e aumentar o acoplamento.

Polimorfismo:

Uma vez que todos as models herdam os métodos da "BusinemeModel", alguns delas permanecerão as mesmas (como salvar ou excluir), mas alguns vão mudar sua implementação a cada contexto de classe especializada. Com estas operações polimórficas, podemos delegar comportamento específico para as classes, e mesmo que a herança vá aumentar o acoplamento, o polimorfismo irá abaixá-lo.