Práticas recomendadas: padrões de programação de aplicativos de banco de dados

11

Eu escrevi muitos aplicativos Web de banco de dados (MySQL) até agora, mas sempre acho que minha estrutura é meio desajeitada. Quero melhorar o padrão de programação / design que uso, esperando alguns conselhos aqui. Particularmente, não consigo encontrar uma estrutura que complemente uma abordagem OOP que encapsule a implementação do banco de dados (esquema). Eu

Acho que minha pergunta pode ser melhor explicada por exemplo. Existem duas abordagens que uso agora, digamos que tenho um objeto / classe de fatura:

O primeiro é usar funções membro estáticas

class Invoice
{
   int id;
   string ref;
   int customer_id;
   date created;
   date due;

   static id create();
   static bool update(id, field1, field2, ...);
   static bool delete(id);
   static bool get(id);
};

A segunda abordagem é colocar tudo em um objeto de banco de dados:

class Database extends ProprietaryDBConnecter, Singleton
{
   id createInvoice();
   bool updateInvoice(id, field1, field2, ...);
   bool deleteInvoice(id);
   bool getInvoice(id);

   id createCustomer();
   bool updateCustomer(id, field1, field2, ...);
   bool deleteCustomer(id);
   bool getCustomer(id);

   // etc...
}

Eu acho que as duas maneiras pelas quais as funções de membro (SQL) são muito inseparáveis ​​da "view", pois a "view" determina o que as classes precisam ter e, portanto, parece quebrar a arquitetura do documento / exibição.

Além disso, parece meio ineficiente, por exemplo, uma instrução SELECT deve selecionar apenas o necessário, mas a presença de variáveis ​​de membro na Fatura parece implicar "dados garantidos".

Não sei se expliquei a pergunta com clareza: Quais são algumas das melhores abordagens para esse padrão de arquitetura / design / o que é conhecido?

Obrigado por conselhos

Jake
fonte

Respostas:

14

Bem, suponho que você poderia usar um ORM.

Mas, realmente, o design do banco de dados NÃO deve seguir os princípios do POO, deve seguir os princípios do design do banco de dados, como a normalização. E deve ser projetado no banco de dados e não no aplicativo. E as regras de integridade de dados devem ser aplicadas no nível do banco de dados, não pelo aplicativo.

Sugiro que você leia alguns livros de design de banco de dados e, em seguida, leia sobre desempenho ajustando o banco de dados de sua escolha.

HLGEM
fonte
5
+1 para nem tudo deve ser OOP (mesmo que alguns ORMs são bastante agradáveis!)
Javier
1
Os O / RMs são bons, mas usá-los não significa que você não esteja em conformidade com o bom design do banco de dados.
BlackICE
1
@ David, eu concordo que isso é verdade nas mãos de alguém que sabe o que está fazendo. Sugeri que ele olhasse para um ORM, mas, na verdade, se você não conhece o design do banco de dados primeiro, um ORM é uma ferramenta perigosa.
HLGEM
Esse é um bom ponto para que as regras de integridade de dados possam ser aplicadas no nível do banco de dados. No entanto, às vezes faz sentido colocar algumas regras (como 'o projeto sempre deve conter mais de 5 membros da equipe') no aplicativo se as regras estiverem sujeitas a alterações e apenas o aplicativo modificará os dados.
precisa saber é o seguinte
O aplicativo quase nunca é a única coisa que modifica os dados. As regras de negócios que não são inseridas no banco de dados tendem a ser violadas com muita facilidade quando alguém precisa fazer uma alteração rápida em uma grande parte dos dados para dar suporte a alguma correção de dados.
HLGEM
10

Não consigo encontrar uma estrutura que complemente uma abordagem OOP que encapsule a implementação do banco de dados

Parece que você está descrevendo a incompatibilidade de impedância objeto-relacional .

Há várias coisas que devem resolver essas ferramentas OODBMS, ORM, uma série de ferramentas de acesso a dados.

Eu acho que o fato de haver tantas soluções me leva a acreditar que o One True Solution ™ não existe.

Assim, você pode escolher qualquer direção que desejar, sabendo que algumas pessoas vão odiar e outras vão adorar.

Conrad Frix
fonte
Parece que é, de uma maneira mais rigorosa.
Jake #
2

Se você não quiser usar um wrapper ORM, use um banco de dados que suporte o armazenamento no estilo OOP, como o MongoDB .

MongoDB (de "hu mongo nós") é um multi-plataforma de banco de dados orientado a documentos do sistema. Classificado como um banco de dados " NoSQL ", o MongoDB evita a estrutura tradicional de banco de dados relacional baseada em tabela em favor de documentos semelhantes a JSON com esquemas dinâmicos (o MongoDB chama o formato BSON ), facilitando e agilizando a integração de dados em certos tipos de aplicativos. ..

Josh K
fonte