Je viens de rencontrer un "problème intéressant", sur lequel j'aimerais avoir votre avis:
Je développe un système et pour de nombreuses raisons (c'est-à-dire: abstraction, indépendance technologique, etc.) nous créons nos propres types d'échange d'informations.
Par exemple: s'il existe une méthode appelée SendEmail et invoquée par la logique métier, elle possède un paramètre de type OurCompany.EMailMessage, qui est un objet totalement indépendant de la technologie et ne contenant que des "données pertinentes pour l'entreprise" (pour exemple, aucune information sur le codage de la tête).
Dans la fonction SendEmail, nous obtenons ces informations de notre objet EMailMEssage et créons un objet MailMessage (celui-ci est spécifique à la technologie) afin qu'il puisse être envoyé sur le réseau.
Comme vous pouvez déjà le remarquer, notre classe a un nom très similaire à la classe de langue "native". Le problème est: c'est exactement ce qu'ils sont, des e-mails, il est donc difficile de leur trouver un autre nom significatif.
Avez-vous souvent ce problème? Comment gères-tu ça?
Edit: @mgkrebbs vient de commenter l'utilisation de noms pleinement qualifiés. C'est notre approche actuelle, mais un peu trop verbeuse, à mon humble avis. J'aimerais quelque chose de plus propre, si possible.
la source
Réponses:
Il s'agit d'un problème concernant l'espace de noms que vous allez utiliser pour votre projet.
Fondamentalement, un espace de noms est la collection des mots clés fournis par toutes vos classes et / ou toutes les classes que vous souhaitez utiliser dans votre projet (y compris les classes standard généralement fournies avec le langage / compilateur / IDE).
Étant donné qu'un espace de noms est une collection, certaines règles fondamentales sont appliquées pour empêcher la création d'un gâchis de termes sans aucun comportement associé, et certains langages comme le C # vous permettent également de définir votre propre espace de noms comme d'habitude et de l'utiliser dans d'autres classes.
Ne confondez pas l'espace de noms avec le mot-clé de base de la langue, ils sont à la fois une collection de mots-clés mais avec une grande différence entre les deux: vous pouvez modifier un espace de noms mais vous ne pouvez généralement pas modifier les mots-clés de base d'une langue. La somme entre l'espace de noms que vous avez utilisé dans votre projet et les mots clés de base de la langue que vous utilisez vous donne le nombre total de mots clés.
Le sujet est largement discuté sur le net, je peux suggérer une recherche de base avec les termes "namespace [votre langue]" ou quelque chose comme ça. Je ne réponds pas directement à votre question simplement parce que vous pouvez avoir une approche différente pour différentes langues.
la source
Eh bien, mon ancienne équipe de développement utilisait pour ajouter l'acronyme de l'application dans chaque classe personnalisée. Nous avions par exemple la classe ABCEmail .
Je pense que c'est plus simple que de s'appuyer sur l'espace de noms, mais peut également être une solution complémentaire à l'utilisation de l'espace de noms.
Dernier point mais non le moindre, puisque vous créez un nouvel objet, cela signifie que l'objet natif ne répond pas à vos besoins, donc votre nom de votre fichier e-mail pourrait être CustomizedEmail , AdvancedEmail ... etc
la source
OAEmail
mieux queOurApplication.Email
?OAEMail
a un impact sur chaque partie du logiciel, tandis que la notation d'espace de noms n'a un impact que là où la conversion se produit et les deux classes sont utilisées dans le même fichier source.Quelle langue utilisez-vous? La réponse est spécifique à la langue. En général, la réponse est «utiliser des espaces de noms». Je ne modifierais presque jamais le nom du type pour éviter un conflit avec un espace de noms externe.
Dans une seule application Java, il est assez courant d'avoir le même nom de classe (par exemple "Date") défini dans une demi-douzaine d'espaces de noms. Si une classe doit utiliser deux classes Date distinctes, alors l'une des classes Date doit être pleinement qualifiée partout où elle apparaît, car Java ne prend pas en charge les alias de type. En C ++, la vie est plus facile; vous pouvez simplement renommer l'un d'eux avec un typedef.
la source
Cela dépend vraiment de la langue que vous utilisez. En c ++ et java, ce problème est résolu en utilisant des espaces de noms. J'utilise c ++, et il m'arrive d'avoir différentes classes avec le même nom. Ce n'est pas un problème, car ils sont dans des espaces de noms différents.
Dans d'autres langues, il n'y a pas d'autre moyen que de fournir des noms différents.
la source
xyz123
et cela fonctionne toujours de la même manière. Je ne vois pas d'autre moyen que de devenir verbeux (vous avez dit dans les commentaires que vous essayez de l'éviter).Votre question est très bonne. Et si vous préfixez votre méthode avec un préfixe tel que U (ou u) ou cls (abréviation de class)? Pour des exemples:
clsEMailMEssage ou uEMailMEssage
Cela ne nécessite pas beaucoup de saisie et vous pouvez immédiatement dire que le type est le vôtre.
Edit - En réponse aux 2 premiers commentaires:
Je voudrais attirer l'attention du lecteur sur le fait que: Toutes les notations hongroises ne sont pas créées égales. Nous devons faire la distinction entre le système hongrois et les applications hongroises , je suppose que la suggestion ci-dessus suit le type d'applications hongroises, ce qui n'est pas dangereux.
Le préjudice associé à la notation hongroise du système, comme le fait de nommer un ID, un intID n'est pas présent dans la suggestion ci-dessus.
Pour en savoir plus à ce sujet, jetez un œil à: Rendre le code incorrect faux - Joel On Software
la source