Compte tenu des classes ou: p> La première approche est celle que j'ai généralement utilisée et semblait toujours la plus intuitive pour moi. Mais après avoir vu une grande base de code qui a utilisé la deuxième approche, je dois admettre que cela se développe sur moi. Les deux choses que j'aime vraiment sur la deuxième approche sont les suivantes: p> Y a-t-il une meilleure pratique qui couvre cela? P> p> société code>, Employee code> et voiture code> Quelle est la pratique préférée pour les méthodes pour récupérer des voitures associées à une entreprise ou à l'employé? < Pré> xxx pré>
voiture code> Code associé ensemble dans un fichier, ce qui rend le code plus modulaire et plus facile à entretenir. li>
voiture code> (ou plus comme list Voiture code> classe. Li>
ul>
8 Réponses :
J'utiliserais la première approche dans les classes d'entités. Il ne devrait y avoir aucun paramètre à ces méthodes car ils ne renvoient que toutes les associations. La deuxième approche qui implique une logique d'entreprise simple devrait être placée dans une classe d'assistance ou peut-être le Cardao, si vous en avez un. P>
Grande suggestion TOB! J'aime vraiment cette approche car elle offre le meilleur des deux mondes.
C'est tout sur les relatives à la relève. Un employé peut-il avoir plus d'une voiture? (1: N) Ne faites jamais référence au 1 côté du côté N, c'est ce que mon professeur a dit. Idem pour les autres choses. Si vous avez un 1: 1, vous pouvez faire les deux. Employé.getcar et Car.Getowner; -) P>
Il n'y a rien de mal à vouloir utiliser Employee.gecars () et Car.getdrivers (). et I> Vous ne répondez pas à la question, qui concerne Car.getcarsbyBewewner ().
Je pense qu'il n'y a pas une solution unique. Cela dépend de la façon dont vous discutez. Si c'est responsable des voitures de savoir par qui ils appartiennent, je voudrais utiliser la deuxième approche. Mais s'il s'agit de la responsabilité de l'employé de savoir quelles voitures il a, alors j'utiliserais la première approche. P>
Cependant, je préférerais personnellement la première approche car elle semble être plus facile à mettre en œuvre. P>
Un employé a une voiture em> (ou certaines voitures, d'ailleurs), chaque employé sait naturellement quelles voitures qu'il utilise. Mais la voiture savait-elle ou soin de qui "possède"? Je dirais non. Cela peut savoir qui le conduit, mais c'est une question différente. P>
Soit la voiture saise quel employé le possède (ce qui est faux, c'est une relation étrange a-une relation), ou il doit rechercher tous les employés de se retrouver, ce qui est encore pire (illogique, lent, tout mais lâche couplage). P>
Les deux approches me paraissent un peu moi-même. Pourquoi le cours des employés devrait-il savoir sur la classe de voiture? Pourquoi la classe de voiture devrait-elle savoir sur l'employé? Aucune des classes n'a besoin de l'autre pour fonctionner, alors les coupler sont inutiles. Je ne ferais que stocker un dictionnaire quelque part qui a cartographié les employés à une collection de voitures et une autre que les entreprises mappées à une collection de voitures. P>
Pourquoi une classe d'employés devrait-elle savoir sur l'âge ou le salaire de l'employé? Il suffit de faire une carte (une pour chaque attribut)! Et après un certain temps, quelqu'un décide de collecter toutes les cartes liées à la classe des employés dans une classe ...
Le problème ici est couplant. En général, vous devriez éviter de coupler une classe à une autre chaque fois que possible.
Je n'ai même pas pensé à cela, grand point, peut-être que la méthode appartient à une classe DAL et au lieu de retourner un employé qui a une liste de voitures, retourne un employé de classe dimensionnellebycar qui se comporte comme tuple
Il n'y a pas de meilleur moyen. Cela dépend de ce que votre application doit faire. Deux applications utilisant les mêmes données peuvent avoir des modèles d'objet complètement différents, en fonction de leurs cas d'utilisation. P>
Exécuter ce problème par la loi du traitement de la logique Demeter. Très serviable, juste! hehe p>
La question est présentée d'une manière qui aura toujours un couplage entre les employés et les classes de voiture. Si vous pouvez modifier La meilleure approche serait de réduire le nombre d'objets couplés. Donc, tout dépend de la manière dont l'objet de niveau suivant dans la chaîne sera la voiture. p>
Je ne pense pas qu'il y ait une droite awwer à cette question, tout est sur la situation actuelle. P> car.getbyemployee (...) code> à car.getbydriverslicensenumber (...) code> (ou quelque chose de similiaire) alors vous découpleriez les deux classes. p>
FYI: Je sais que vous n'avez pas violé la loi de Demeter. Je suggère que les programmeurs américains devraient y penser avant que des violations ne se produisent.
ni. p>
avoir une interface appelée Lorsque vous devez avoir besoin de trouver une propriété de voiture, vous n'avez pas besoin de vous soucier de si le propriétaire est un employé ou une entreprise. Vous avez juste besoin de faire J'espère que cela vous aidera. P> icarowner code> implémenté par Employee code> et société code> (ou leurs dérivations), puis créez la classe la compagnie d'accueil code> avec attributs voiture code> (de type voiture code> ou icar code>) et propriétaire code> (de type ICARELER CODE>). P>
Chernowershersks.EtByByWeler (ICARELER) CODE>. P>
Choisissez un ensemble de conventions et de règles concernant ces choses et rendez-les simplement conformes à chaque scénario similaire qui présente cette même décision. Le résultat de la décision est relativement sans importance.
De plus, dépend de ce que vous suivez, si cela va souvent être 4 voitures à un employé, je ferais des employés.gecars () parce qu'il rétrécit le champ dès le départ, mais si vous avez des millions d'employés et très peu de voitures , Je ferais des voitures.betbyemployee alors que les voitures seront le plus petit ensemble. Je suppose que je dis que je préfère: sous-ensemble.getsemperset () de sorte que la sélection plus étroite est la classe.
@JIMMY: Je n'appellerais pas nécessairement des voitures un sous-ensemble d'employés à moins que vous n'ayez un penchant d'embaucher des véhicules sensibles, mais je suis d'accord avec le point général que vous faites.