2009-10-08 6 views
3

J'ai déjà entendu dire par certains développeurs que L2S n'est pas évolutif. Je ne suis pas sûr de comprendre parfaitement ce que cela signifie. Je suppose que cela a quelque chose à voir avec les couches de votre application (à condition que votre application soit une couche). Quelqu'un peut-il faire la lumière sur ce sujet?Qu'est-ce que cela signifie que Linq To SQL n'est pas évolutif?

Merci, Avi

+0

Couvert déjà dans http://stackoverflow.com/questions/214233/how-scalable-is-linq – Andrew

Répondre

2

Ceci est plus d'une évolutivité fonctionnelle. Si vous regardez vos objets de domaine générés par LINQ, vous remarquerez beaucoup de ballonnements, ce qui peut devenir inutile si vous deviez passer à un autre framework de persistance tel que NHibernate. Une des options est de déployer votre propre couche de domaine qui est plus abstraite et de mapper votre domaine généré à l'abstrait. Garder votre couche de domaine «sans ballonnements» vous permet de le réutiliser avec différents cadres de persistance. L2S n'est pas très bon. D'autres choses peuvent inclure la performance, mais je pensais que cela a été amélioré dans les versions ultérieures?

+0

Merci pour la réponse rapide. Donc, si je comprends bien, ce que fait essentiellement L2S est de lier votre couche de domaine à la couche d'accès aux données, n'est-ce pas? Eh bien, cela semble mauvais, mais est-ce un problème d'évolutivité, ou un problème de maintenance? Une autre chose qui n'est pas vraiment claire pour moi, c'est que vous dites qu'il y a deux couches de domaine, une qui est écrite par les développeurs et une autre qui est générée. Je n'ai jamais entendu parler de deux couches de domaine auparavant. Le domaine généré est-il créé par un générateur de code? Et puis mappé à l'autre couche de domaine? Je n'ai toujours pas ce concept. Merci beaucoup –

+0

Il s'agit d'une évolutivité fonctionnelle, voire rien. L2S a un générateur d'entité qui crée la couche de domaine/entité en fonction de votre schéma de base de données. Le modèle de domaine que vous allez en extraire est étroitement lié à L2S. Si vous souhaitez pouvoir porter un cadre de persistance différent à une date ultérieure, vous pouvez être intéressé par la création d'un modèle de domaine abstrait. Cependant, vous devrez mapper vos entités L2S à vos entités de domaine abstraites (et inversement) chaque fois que vous voulez récupérer ou conserver des données, ce qui représente un surcoût supplémentaire. Et si vos applications sont extensibles, vous pouvez imaginer la douleur ici. –

+0

Ce n'est pas un problème, pour la plupart des projets. Tout le monde ne conçoit pas comme ça. Je suis juste un puriste :) –

1

Même si vos collections sont petites, le SQL généré par un générateur de code ne sera jamais aussi optimisé que le code SQL, en particulier si l'obtention d'un bon plan d'exécution dépend fortement du choix des bons index. En supposant que vous codifiez manuellement ces cas et que vous utilisiez des SP, dans les cas où les données sont très volumineuses, vous aurez besoin de beaucoup d'astuces pour utiliser efficacement la mémoire, que votre moteur de base de données puisse vous aider ou non.

Mais toute abstraction a des limites.

2

Je pense qu'il évolue raisonnablement bien, en prenant en compte que Stack Overflow uses it et ce n'est pas un petit site.

+0

Intéressant en effet ... Mais ils pourraient avoir trouvé des moyens de surmonter ses limites, je suppose. –