Question d'usine d'objets - Utilisation d'informations de requête de base de données pour créer des objets

StackOverflow https://stackoverflow.com/questions/3808052

Question

J'ai plusieurs objets, comme les produits, la commande, etc. Lorsque j'obtiens des informations de ma base de données, je prends une ligne et je crée l'un des types d'objets. Je travaille ensuite avec cet objet créé. J'ai lu ceci s'appelle une usine.

Y a-t-il un avantage à faire cela? Surtout dans un langage dactylographié comme PHP?

Merci

EDIT: Est-ce là que je reçois l'agnosticité de base de données? Est-ce ce que fait essentiellement un orm?

Était-ce utile?

La solution

En créant vos objets à partir des requêtes de base de données, vous définissez le mappage entre vos objets et la base de données relationnelle. C'est exactement ce que fait Orm Software.

En le faisant et en vous assurant que vos objets n'accèdent jamais directement à la base de données, mais utilisez plutôt vos fonctions / objets d'accès à la base de données, vous protégez votre code des changements de deux manières:

  • Les modifications apportées à votre schéma de base de données ne renverseront pas votre code. Au lieu de cela, les modifications de code ne seront situées que dans vos objets d'accès à la base de données.

  • Vous pouvez passer à un DBMS différent en implémentant une nouvelle couche de base de données qui suit la même interface que l'original. Vos autres objets ne nécessiteront pas de modifications.

Je suppose que dans ce sens, vous obtenez une certaine agnosticité de base de données, mais vous ferez probablement mieux d'utiliser une bibliothèque de base de données qui fournit cette agnosticité hors de la boîte.

À mon avis, l'avantage est que vous travaillez avec des objets et que vous obtenez tous les avantages qu'une langue orientée objet offre. Vous pouvez ensuite lire la logique du domaine à un niveau supérieur (en termes d'objets que vous avez définis) sans passer au filtre via des requêtes de base de données. Écrire l'ORM vous-même peut être difficile, mais il existe des outils qui aident à cela.

C'est la route que je prends normalement, mais je ne fais aucun développement PHP, donc je ne peux pas dire à quel point cela s'applique bien à cette langue.

Autres conseils

Ce que vous décrivez est une implémentation d'une couche d'accès aux données - cela ne ressemble pas à un exemple de Modèle de méthode d'usine, ni le Modèle d'usine abstrait.

Oui, Orms combler l'écart des objets aux bases de données relationnelles et peut servir de couche d'accès aux données. Gardez à l'esprit que tout ORM que vous utilisez a certains avantages / inconvénients / limitations. Selon votre expérience et vos exigences, écrire votre propre couche d'accès aux données est parfois une bonne idée; Ne vous sentez pas comme si vous deviez utiliser un orm tiers.

Oui, une bonne couche d'accès aux données facilite l'échange de votre mécanisme de stockage (base de données différente, XML, fichiers plats, peu importe) sans modifier votre logique professionnelle, votre interface utilisateur ou votre autre code.

Indépendamment des langages de type lâche ou de type fort, si vous travaillez dans une langue OO, il sera beaucoup plus facile d'écrire du code à l'aide d'objets de données (fournis par une couche d'accès aux données ORM ou localisée). Je suis sûr qu'il est possible d'écrire un système sans couche d'accès aux données, où votre couche commerciale fonctionne directement avec la base de données. Mais il sera probablement plus difficile de mettre en œuvre et de maintenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top