2010-03-30 9 views
2

Dans cet exemple, Google App Engine documentation fait du Customer le parent du groupe d'entités de l'entité AccountInfo. Ne pas AccountInfo encapsuler Customer plutôt que l'inverse? Normalement, je pense à une classe AccountInfo comme incluant toutes les informations sur le Customer.Dans cet exemple, Customer ou AccountInfo est-il correctement le parent du groupe d'entités?

import javax.jdo.annotations.IdGeneratorStrategy; 
import javax.jdo.annotations.PersistenceCapable; 
import javax.jdo.annotations.Persistent; 
import javax.jdo.annotations.PrimaryKey; 
import com.google.appengine.api.datastore.Key; 
import com.google.appengine.api.datastore.KeyFactory; 

@PersistenceCapable 
public class AccountInfo { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 

    public void setKey(Key key) { 
     this.key = key; 
    } 
} 

// ... 
     KeyFactory.Builder keyBuilder = new KeyFactory 
     .Builder(Customer.class.getSimpleName(), "custid985135"); 

     keyBuilder.addChild(AccountInfo.class.getSimpleName(), "acctidX142516"); 

     Key key = keyBuilder.getKey(); 

     AccountInfo acct = new AccountInfo(); 
     acct.setKey(key); 
     pm.makePersistent(acct); 

Répondre

2

Dans la réalité, un client peut avoir plus d'un compte, par exemple un compte courant et un compte d'épargne. Les clients qui sont des organisations plutôt que des individus peuvent avoir plusieurs comptes à des fins différentes.

Par conséquent, il est parfaitement logique d'avoir une seule entité Client pouvant posséder une ou plusieurs entités AccountInfo.

+0

Exactement. Un client peut avoir des comptes d'homme (et évidemment "client" devrait être "entité" - comme dans l'entreprise, juridique ou personnel - avec un rôle client/fournisseur/employé attaché, parce que votre client peut également être votre fournisseur en même temps ', Sauf si vous codez le rôle dans accountinfo - mais une "entité" doit également avoir plusieurs comptes. – TomTom

0

Les clients appartiennent à des comptes - pas l'inverse. Le compte est votre entité principale. Le compte aura une variété de parties responsables en fonction de ce que le compte est pour. Un compte bancaire aura une ou plusieurs «Liable Party» et un ou plusieurs Signee et probablement un ou plusieurs Destinataires de Compte. Un «client» est une notion abstraite qui n'est pertinente que dans un contexte donné - bien que les départements marketing puissent conserver une liste de clients à poster. Si je faisais cela, je définirais mon champ d'application comme si les identifiants/noms du client étaient fournis en dehors de la portée I.E. ils sont donnés.

NB Pensez-vous avoir un compte en banque? Vous ne le faites pas. La banque possède le compte. Ils l'ont mis en place et vous donnent la permission de l'utiliser. De votre «monde réel», vous pourriez considérer que vous créditez «votre» compte. Dans le «vrai monde» réel, la banque débite en fait le compte auquel elle vous donne accès (aussi longtemps qu'elle le décide). Les fonds que vous venez de "créditer" sur votre compte sont listés comme une dette par la banque puisqu'ils vous doivent maintenant de l'argent. «In The Real World» est un faux cliché utilisé par ceux qui trouvent l'analyse des affaires trop difficile. Les projets prennent plus de temps à produire les marchandises qu'ils ne l'ont jamais fait - en partie grâce aux personnes qui définissent les concepts d'entreprise autour d'une vision commune du monde. La seule chose qui ne soit pas bousillée par ces Real Worlders, ce sont les systèmes de comptabilité, car il y a des règles spécifiques qui les régissent. Glossaire des termes - essayez de définir le client! Tricky hein?