genre de titre long, mais c'est généralement la question.
Je veux savoir si vous pensez que c'est une bonne idée de faire ce qui suit. p>
au lieu de: p> < Pré> xxx pré>
Je veux avoir quelque chose comme: p> Pensez-vous que c'est bon / terrible / trop fantaisie / trop lent / trop lent?
Si vous pensez réellement que c'est bien je pensais à utiliser spel < / a> Pour la mettre en œuvre, quelqu'un a-t-il quelque chose de meilleur / plus léger / plus rapide? P> Merci, P> P>
5 Réponses :
Ce n'est pas nécessairement une mauvaise chose, mais votre cas simple peut bien être résolu avec exception em> déclarations ( Plutôt que assertions em> que j'ai initialement mentionné). p>
Il semble que vous introduisiez votre propre ensemble d'annotations que d'autres développeurs de votre projet doivent accepter et s'adapter à. Cependant, une fois que vous avez introduit des annotations, il semble qu'une approche régulière Pour résumer: le problème que vous avez décrit peut facilement être résolu à l'aide de solutions de remplacement Java standard, bien que dans un cas plus complexe, il pourrait être justifié (considérer par exemple, proxy code> serait un meilleur candidat à résoudre le problème. p>
@secured code> au printemps-sécurité), en particulier Si vous développez votre propre framework em>. p>
Et il introduit une autre langue à l'intérieur des annotations.
En fait, cette question a été dans ma tête exactement comme un effet secondaire d'utiliser @secured code>. Mais puisque nous utilisons déjà
@secured code> pour la sécurité de niveau de la méthode, il serait déroutant de l'utiliser pour les chèques de défensifs IMO, c'est pourquoi je demande des idées sur le faire et que
@secured Code> et
@peuthorize code> Utilisez Spel, je pensais que le choix évident.
Il est généralement considéré comme inapproprié d'utiliser affirmer code> pour vérifier les arguments. Mais vous pouvez ajouter une méthode, disons,
Legalid code> ou
CHECKID code> pour effectuer la vérification de manière concise.
@Simon, si vous développez un cadre de cadre utilisé par d'autres applications, cela peut en valoir la peine. Si utilisé dans ce projet, il ajoute probablement plus de confusion et tend à être survenant. Néanmoins, si vous voulez apprendre, avoir les Devs de votre côté et le temps de la mettre en œuvre, bien sûr, essayez-le.
@ Tomhawtin-tackline, oui je pense que tu as raison. J'ai mis à jour le poste et a référencé un point de vue de la présente publication sur le problème de l'affirmation / des exceptions.
Je pense que c'est p>
J'aime utiliser Préconditions de Guva classe pour de tels contrôles. De plus, de tels contrôles font partie de la logique commerciale, IMHO. P>
Que ce soit la logique commerciale ou non est subjective (probablement ... Je ne suis pas sûr de savoir s'il y a une définition décisive), mais toujours son dans la méthode :) et à l'intérieur de la méthode, je me sens mieux (peut-être que c'est juste moi) si je Ne lisez pas 10/20 lignes de chèques, ce qui est normal si vous essayez d'être sûr à 100%.
Les conditions préalables de Guava réduiraient le nombre de lignes, car elles évitent les blocs IF. Si ces chèques sont si gros qu'ils dérangent, alors mettez-les dans une méthode privée et appelez cette méthode privée. Qui réduit les chèques à une seule ligne. Et si vous voulez être sûr à 100%, n'utilisez pas d'assertions (pouvant être désactivées - et sont désactivées par défaut IIRC) et n'utilisez pas un aspect, qui peut être désactivé, ou mal installé de manière incorrecte.
@downvoter: Vous pourriez être en désaccord avec ma réponse, mais cela ne le rend pas utile. Pourquoi le bowvote?
C'est bon aussi longtemps que vous êtes sûr qu'il est allumé lorsque vous en avez besoin pour être.
Il ressemble à Je ne sais pas des performances, mais pour moi, ce n'est pas une overgineering: vous gardez uniquement le code logique. J'aime travailler avec ça. P>
Je pense que vous vouliez dire des annotations, pas des aspects. Les aspects sont normalement externes au code qu'ils conseillent. Dans tous les cas, vous pouvez accomplir le type de validations que vous avez soulignées dans votre message avec JSR 303 a>. Cas au point: public void buyItem(@Min(value = 1) int itemId, @Min(value = 1) int buyerId) {
// buy logic
}
Je veux dire des aspects. Je suis ouvert aux suggestions d'approche de non-annotation.