Diagrama de Classes - msfernandes/busine.me GitHub Wiki
###Models
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.