Son probarbly un problème simple à 3 niveaux. Je veux juste m'assurer que nous utilisons la meilleure pratique pour cela et je ne suis pas encore familier avec les structures.Où les objets fusionnent/joignent-ils des données dans un modèle à trois niveaux?
Nous avons les 3 niveaux:
- GUI: ASP.NET pour la présentation-couche (première plate-forme)
- BAL: couche d'affaires sera en charge la logique sur un serveur web en C#, DAL: LINQ to SQL dans la couche de données, renvoyant BusinessObjects non LINQ. LINK à SQL dans la couche de données. DB: Le SQL sera Microsoft SQL Server/Express (encore décidé).
Pensez à la configuration où nous avons une base de données de [Personnes]. Ils peuvent tous avoir plusieurs [Adresse] es et nous avons une liste complète de tous [PostalCode] et des noms de villes correspondants, etc.
L'affaire est que nous avons joint beaucoup de détails d'autres tables.
{Relations}/[tables]
- [Personne]: 1 --- N: {} PersonAddress: M --- 1: [Adresse]
- [Adresse]: N --- 1: [Code Postal]
Maintenant, nous voulons construire le DAL pour la personne. Comment devrait ressembler PersonBO et quand les jointures se produisent-elles? Est-ce un problème de couche de gestion pour récupérer tous les noms de villes et adresses possibles pr. La personne? ou le DAL devrait-il terminer tout ceci avant de retourner le PersonBO au BAL?
Class PersonBO
{
public int ID {get;set;}
public string Name {get;set;}
public List<AddressBO> {get;set;} // Question #1
}
// Q1: récupérons-nous les objets avant de retourner le PersonBO et devrait-il être un tableau à la place? ou est-ce totalement faux pour n-tier/3-tier ??
Class AddressBO
{
public int ID {get;set;}
public string StreetName {get;set;}
public int PostalCode {get;set;} // Question #2
}
// Q2: faisons-nous la recherche ou laissons simplement le code postal pour une consultation ultérieure? Est-ce que quelqu'un peut expliquer dans quel ordre tirer quels objets? La critique constructive est la bienvenue. : 0)
Merci pour votre temps et vos efforts, je connais le principe de la charge paresseuse, je pense que c'est plus une question d'où mettre quel code ou quelle classe devrait effectuer quelle action afin d'être "bon niveau" design. Je voudrais séparer les niveaux "par les meilleures pratiques", mais j'ai du mal à comprendre comment une fonction "PersonBAL.GetAll()" retournera des données et si ce sont vraiment des éléments "unLINQed" comme cela pourrait être un webservice demandant les données + comment le h *** garde-t-on l'objet/ID pour sauvegarder/mettre à jour quand le niveau de l'interface graphique publie? – BerggreenDK
@Berggreen: Je suis assez certain d'avoir répondu à cette question. le code de chargement paresseux va dans la collection elle-même ou dans la propriété getter (si c'est une association 1: 1). Si vous essayez d'exposer ce type d'API sur un service Web, vous vous trompez; les services Web exposent les opérations, pas les données. Cela dit, pour les rares occasions où vous avez besoin de retourner des relations profondément imbriquées à travers un service web, la solution typique est de permettre au consommateur de spécifier, dans la requête, quelles associations charger, et de laisser le reste comme null '/ vide (pas de chargement paresseux). – Aaronaught
okay, je pourrais ne pas avoir compris votre réponse complètement, mais je marquerai comme la réponse alors. : o) merci encore !! – BerggreenDK