2013-04-03 5 views
0

J'ai une classe dans la couche d'accès aux données, disons BaseDAL qui a des méthodes standard Insert, Update, Delete. Est-il bon d'utiliser la même classe de ma couche de logique métier pour toutes les entités de mon application ou de créer plusieurs classes DAL pour toutes les entités et de les utiliser pour l'accès aux données? En d'autres termes, quoi de mieux? Plusieurs instances de la même classe desservant de nombreux clients ou des instances distinctes de classes distinctes desservant leurs entités respectives?C# objets multiples vs classes multiples

+1

s'il y a des champs client n'a pas besoin de voir, il est préférable d'utiliser d'autres classes. Vous pouvez utiliser des interfaces dans ce cas. – Dilshod

+0

Pouvez-vous donner un exemple? Ce n'est pas clair à 100% ce que vous demandez et je pense qu'un exemple rendra votre vraie question claire. Par exemple, vous avez peut-être une base de données sur les animaux et vous avez des clients qui ne s'occupent que des chats. Est-ce votre question? Vous pourriez aussi dire que vous avez le même animal db et que vous avez un client qui ne s'occupe que d'un animal nommé George. – Hogan

Répondre

1

Cela dépend de la fréquence à laquelle vous devez changer d'entité, de la flexibilité dont vous avez besoin et de la vitesse à laquelle vous devez écrire le code. Selon les bonnes pratiques, vous devez créer une classe d'entité distincte pour chaque couche (couche DAL, BL, couche Présentation). Et il en résultera une architecture plus flexible. Mais l'inconvénient d'une telle solution est que vous devez écrire beaucoup de méthodes de conversion, la performance tombe souvent un peu, et le plus important - si vous effectuez un changement vertical (qui affecte toutes les couches) - vous devez changer beaucoup de code. Donc, si votre application est à usage unique et que vous savez qu'elle ne durera pas plus de quelques semaines/mois, il peut être justifié de ne pas créer autant de flexibilité en faveur de la création de l'application plus rapidement. Mais je le souligne une fois de plus - seulement pour les petites applications de courte durée. J'utilise souvent une interface de base commune avec toutes les propriétés publiques pour ces classes d'entité de toutes les couches (j'ai habituellement 3 classes d'entités: pour DAL, BL, PL séparément) et j'écris pour elles une classe de convertisseur unique. Il a toujours assez de flexibilité en cas de besoin, mais permet d'écrire moins de code. Désolé, j'ai mal compris la question au début. En ce qui concerne les classes de référentiel d'accès aux données, il est bien sûr préférable de diviser la fonctionnalité en parties (probablement en fonction du type d'entité). Sinon, vous obtiendrez bientôt un fichier de cent mille lignes.

Et il y a aussi un principe de conception "Principe de responsabilité unique". Selon lui, il est également préférable de diviser les fonctionnalités. Bien qu'il puisse être considéré que toutes les méthodes d'accès aux données ont une responsabilité unique au niveau le plus élevé, elles font des actions très différentes et travaillent avec des entités différentes.

+0

Je n'ai rien vu dans la question sur les couches. Comment cela se rapporte-t-il? – Hogan

+0

Désolé, j'ai mal compris la question. Édité maintenant. –

0

Quelque chose comme ceci:

public interface IPerson 
{ 
    string Name{get;set;} 
    string LastName{get;set;} 
    //do not add fields which client doesn't need 
} 

public class PersonServerSide : IPerson 
{ 
    //implement IPerson 
    public string SSN{get;set;} //client doesn't need this for example 
} 

public class PersonClientSide : IPerson 
{ 
    //implement IPerson 
} 
+0

Cette réponse ne semble avoir rien à voir avec la question, pouvez-vous s'il vous plaît expliquer comment il se rapporte? – Hogan

+0

@Hogan ceci est juste un exemple comment il pourrait mettre en œuvre son projet. – Dilshod