Devemos fazer modelagem de relacionamento de entidade ou modelagem orientada a objetos primeiro?

9

Ao criar um aplicativo a partir do zero, devo começar com o modelo orientado a objeto (OO) ou o modelo de relação de entidade (ER)?

pphanireddy
fonte

Respostas:

13

Você pode tentar observar o princípio de adiar as decisões de arquitetura o maior tempo possível. O pensamento é que você saberá mais no futuro sobre o domínio do seu problema do que no momento - portanto, qualquer decisão tomada hoje é suspeita.

Outro bom princípio para combinar isso pode ser tentar primeiro tentar as partes mais arriscadas - o pensamento é que, se você faz as partes fáceis, descobre que as partes arriscadas o movem em uma direção diferente, você não tem refazer as partes fáceis. Arriscado aqui significa coisas que você não tem certeza de como deve fazê-las.

Dado esses dois, e como muitas vezes tento abordar as coisas da perspectiva do OO, você pode tentar começar primeiro com um modelo OO das partes mais arriscadas do seu aplicativo e implementar a menor quantidade possível de código que possa funcionar que satisfaça a requisitos de risco. Em seguida, comece a expandir seu modelo OO, conforme necessário, para adicionar a funcionalidade necessária. Durante todo o tempo, você pode adiar completamente sua decisão de usar SQL ou NoSQL ou arquivos simples ou armazenamento em nuvem ou qualquer outra coisa ... e você pode acabar descobrindo que não quer relacional (evitando a necessidade de um modelo de ER).

Kyle Hodgson
fonte
7

O modelo ER determina como os dados do aplicativo serão mantidos e o modelo OO decide como esses mesmos dados serão armazenados na memória ou enquanto o aplicativo estiver em execução. Portanto, o design do esquema do banco de dados (modelo ER) e o design da estrutura de classe (modelo OO) são considerações de design relacionadas e geralmente podem ser pensadas simultaneamente. De fato, se você estiver usando uma ferramenta de mapeamento objeto-relacional (ORM) , seu modelo de ER e seu modelo de OO podem ser o mesmo. Em outras palavras, suas classes (modelo OO) podem ser anotadas de forma que elas próprias especifiquem o modelo ER.

Antes de projetar, no entanto, verifique se você tem uma idéia muito boa dos requisitos reais do software, para que ele será usado, como será usado e quem o usará. Muitos desenvolvedores começam a pensar nas decisões de design antes de entenderem completamente as necessidades a serem tratadas pelo produto e acabam com um design inadequado para o verdadeiro objetivo do aplicativo.

CFL_Jeff
fonte
+1 para identificar a diferença entre os 2 tipos de modelagem. Não concordo plenamente que você possa pensar nos dois modelos simultaneamente. Além disso, alguns fãs de OO consideram que seus modelos de OO e ER nem sempre devem ser os mesmos. No entanto, um modelo OO pode ser usado como base do design do banco de dados, mas essa transformação é um pouco complicada.
NoChance
@EmmadKareem Você está certo, nem sempre é apropriado pensar nos dois modelos simultaneamente. Eu estava falando em referência à idéia de usar um ORM e fazer anotações em classes para que o design do modelo ER seja integrado ao modelo OO, por assim dizer. Algumas pessoas optam por desenvolver aplicativos dessa maneira, que está implementando essencialmente o OO e o ER simultaneamente.
CFL_Jeff 13/03/12
Não confunda o seu modelo de domínio para um modelo de dados - não confunda um objeto (o que representa uma única instância) com uma tabela de banco de dados (que contém uma coleção de coisas)
Narender Parmar