Angulaire 2 modèles: l'interface vs classes
J'ai une connexion d'accès/module d'inscription et je veux écrire un modèle pour eux.
Je voudrais utiliser les interfaces, mais j'ai besoin d'avoir une valeur prédéfinie.
Et je me demandais - dois-je mettre de la prédéfinis comme une constante (il ne sera pas changé, modifié) et l'utilisation des interfaces. Ou l'écrire sous forme de classes (comme actuellement)
Actuellement, j'ai écrit deux classes distinctes - l'inscription.de modèle.ts, de connexion.de modèle.ts, pourrais-je être en mesure de résumé d'utiliser un seul modèle? (exemple: l'utilisateur.de modèle.ts)
Quelques exemples:
export class LoginUser {
constructor(
private email,
private password,
//I need to have it, backend expects it to be sent
private connection = 'Username-Password-Authentication'
) { }
}
export class RegistrateUser {
constructor(
public name: string,
public lastName: string,
public email: string,
public password: string,
//I need to have it, backend expects it to be sent
private connection = 'Username-Password-Authentication'
) { }
}
Hey @Aravind, je me demandais ce que tu voulais dire par ce commentaire?
ne pas parler pour lui, mais je pense que c'est une observation utile. Tapuscrit est JavaScript et JavaScript est très différent de C# et Java. À l'aide de classes de plain old données est un anti-modèle TS/JS. Il crée de la complexité et expose les bords irréguliers de la langue où il n'est pas nécessaire de le faire.
Merci pour la réponse de l'homme, a été au hasard de la navigation autour et événements à venir dans le commentaire et c'était juste curieux. OMI - il y a beaucoup de constructions de programmation qui sont reflétées dans les Tapuscrit (Angulaire semble hésiter à partir à la fois - comme vous le dites, certains sont des anti-modèles). Mais merci pour la réponse
ne pas parler pour lui, mais je pense que c'est une observation utile. Tapuscrit est JavaScript et JavaScript est très différent de C# et Java. À l'aide de classes de plain old données est un anti-modèle TS/JS. Il crée de la complexité et expose les bords irréguliers de la langue où il n'est pas nécessaire de le faire.
Merci pour la réponse de l'homme, a été au hasard de la navigation autour et événements à venir dans le commentaire et c'était juste curieux. OMI - il y a beaucoup de constructions de programmation qui sont reflétées dans les Tapuscrit (Angulaire semble hésiter à partir à la fois - comme vous le dites, certains sont des anti-modèles). Mais merci pour la réponse
OriginalL'auteur Tomas Eglinskas | 2017-05-05
Vous devez vous connecter pour publier un commentaire.
Je n'hésiterais pas à utiliser les interfaces. C'est une approche simple et suit le Tapuscrit recommandations pour travailler avec JSON.
La propriété en question,
peut ainsi être ajouté par le service qui effectue la demande.
Cela permettra également de réduire la duplication de code, car vous pouvez utiliser une fonction générique ou d'un service pour créer cet objet de demande.
Par exemple:
Alors votre Http service qui envoie le modèle vers le service peut utiliser un type de contrainte pour vérifier que la propriété a été ajouté avant de faire la demande
Par exemple:
Ces sont juste que des exemples, mais ils sont basés sur le code qui est minime, et qui fonctionne.
angulaire.io/guide/styleguide#interfaces l'utilisation de classes
tout à fait, et c'est mal. Il est assez mauvais code.
JSON.parse
ne pas instancier des classes, il crée des objets simples avec pas de patrimoine. À l'aide de classes pour décrire leur forme, leur interface, entièrement code erroné, par exempleinstanceof
est autorisé. L'angle de guide de style est plein de terrible code à n'importe quel taux. Par exemple, il est plein d'exemples qui passent indépendant des fonctions de membre comme les rappels. Vous devez admettre, à moins que ce dernier est indéfendableOriginalL'auteur Aluan Haddad
viens de tomber sur votre question & a enquêté sur la même chose.
Avec référence à la Angulaire 2 Style docs ici, la " ligne directrice est de ne PAS mettre en œuvre une interface sur la prémisse qu'une classe peut seul:
Comme une règle du pouce:
Angulaire Des Lignes Directrices > Tapuscrit Lignes Directrices (dans le cas de l'Angulaire 2 projets).
Espère que cela vous aide! 🙂
export class UserService {get(): Observable<User> {return this.http.get(...).map(r => r.json());}}
consommé commeexport class UserComponent {ngOnInit() {this.service.get().subscribe(user => { if (user instanceof User){ /*never executed ever!*/ }});})}}
Gardez à l'esprit qu'ils sont des guides/guides de style, pour la plupart, ils sont corrects, il est probable qu'il y aura des cas où un cas comme celui ci-dessus ne sera pas pris en compte. Ce que vous êtes probablement à la recherche à utiliser est une classe abstraite au lieu qui respecte Angulaire de guides de style de ne pas mettre en œuvre une interface
Il est intéressant de noter que Googles Angulaire de l'équipe a décidé d'aller avec la Machine, pour une tonne de bonnes raisons, mais leurs lignes directrices ne correspond PAS à la Machine guides. Les Interfaces et les classes sont des tapuscrits ne sont pas les mêmes qu'en C#. les points de bonus. .. On est au moment de l'exécution d'autres est au moment de la compilation! Angulaire de l'équipe, dit simplement utiliser les classes... alors que Microsoft gourous de fortement typé code couplé avec eux de devenir google dev experts ont tendance à encourager les interfaces. Elle est en général de la situation
c'est probablement à cause de Angulars DI
OriginalL'auteur N15M0_jk