Decidere come modellare il cliente quando può essere sia persona fisica che legale

1

Supponiamo che stiamo sviluppando alcune applicazioni che ci richiedono di essere in grado di gestire i clienti e che tali clienti possono essere sia persone fisiche che legali. Esistono diversi modi in cui possiamo gestirli e non sono sicuro quale di essi sia il migliore in termini di estensibilità, riutilizzo del codice e così via.

La prima cosa che ho pensato è stata la costruzione di due classi "NaturalCustomer" e "LegalCustomer". Quindi, le proprietà condivise verrebbero spostate su una classe di base "Cliente" e sia NaturalCustomer che LegalCustomer erediterebbero da esso.

La seconda cosa che pensavo era "considerare ogni cliente come una persona naturale e considerare che un cliente di persona legale è solo una persona fisica che ha una o più società". In tal caso creerei una classe "Cliente" e quindi una classe "CustumerCompany". Se ci sono altre società nell'applicazione che condividono proprietà con CustomerCompany, vorrei creare una nuova società di classe e ereditarla. In questo approccio ci sarebbe una relazione zero-a-molti tra Cliente e Azienda: un cliente può avere una o nessuna società.

Non sono sicuro di come affrontare questo tipo di problema. Sto solo iniziando con l'analisi e il design orientato agli oggetti e sono ancora confuso. Il problema principale è che se seleziono il primo approccio, non riusciamo a riutilizzare molto codice. Ad esempio, nell'app potrebbero esserci altri tipi di persone naturali come "Dipendente" e condividerebbe molte proprietà con NaturalCustomer, e lo stesso per le aziende, potrebbero esserci società come "Fornitore" e condividerebbe molte proprietà con LegalCustomer e ancora non lo userei di nuovo, quindi se dovessi apportare una modifica ai dati che dovrebbero essere archiviati per le aziende dovrei cambiare ovunque.

Come affrontiamo questo tipo di situazione quando non è consentita l'ereditarietà multipla (ovvero non posso rendere LegalCustomer ereditare entrambi dal Cliente e dal LegalPerson)?

Grazie mille in anticipo!

    
posta user1620696 16.08.2013 - 00:00
fonte

3 risposte

1

Guarda il concetto di "Partito coinvolto".

Possono essere persone legali o naturali. È quindi possibile definire una serie di ruoli che li collegano agli altri clienti, ad es. "Owns", "Works For", "Manages", "Supplies", "Major Customer", "Creditor", "Debtor" ecc. Ecc.

Questo concetto è comunemente usato nei sistemi finanziari per valutare il rischio complessivo. Se conosci una persona che "possiede" un'azienda che sta male, aumenta il rischio di prestito al proprietario, ecc.

    
risposta data 16.08.2013 - 03:29
fonte
1

Per cosa stai utilizzando il Cliente (legale o di altro tipo)?

Sospetto che potresti confondere un account (id, saldo, cronologia ordini, ecc.) e un'autenticazione / persona (nome, modulo di indirizzo, ecc.).

Se allunghi le cose, si tratta di una relazione N-N (anche se in pratica puoi probabilmente farla franca con una persona che ha al più un account).

    
risposta data 16.08.2013 - 00:36
fonte
1

Stai occludendo CLIENTE con CONTATTO. Quest'ultimo è colui al quale si scrivono contratti e si inviano fatture e, se necessario, inviare a un avvocato la causa. Il primo è chi può gestire i dettagli della tua relazione con.

Nota che, mentre i clienti possono o non possono essere persone reali, i contatti lo sono sempre. E anche i clienti che sono persone giuridiche possono avere qualcun altro nominato come loro contatto. (coniuge, tutore, poa, esecutore, ecc.)

Se è necessario indicare la relazione precisa tra un contratto e un cliente, includerla come una proprietà della relazione tra di essi, che può essere inclusa nell'oggetto contatto se non si condividono i contratti tra i clienti.

    
risposta data 16.08.2013 - 02:16
fonte

Leggi altre domande sui tag