È la creazione di un “record fittizio” per forza di data-base obbedire alla logica di business, una buona idea o un muto?

StackOverflow https://stackoverflow.com/questions/4146865

Domanda

In alcuni progetti vedo che un record fittizio è necessario per creare in Db al fine di mantenere il via logica di business su senza rompere i vincoli Db.

Finora ho visto il suo utilizzo in 2 modi:

  • Con l'aggiunta di un campo come IsDummy
  • Con l'aggiunta di un campo qualcosa chiamato ObjectType che indica un tipo: Dummy

Ok, aiuta su ciò che deve essere raggiunto.

Ma ciò che mi fa sentire avviso tali soluzioni è a volte è necessario tenere a mente che alcuni record fittizi esistono nella domanda che deve essere gestito in alcuni processi. In caso contrario, si faccia qualche problema fino a quando ci si rende conto della loro esistenza o fino a quando qualcuno nel team vi dirà " Aha! Hai dimenticato i record fittizi. Si dovrebbe anche fare ... "

Quindi la domanda è: E 'una buona idea per creare record fittizi per mantenere la logica di business in quanto è senza fare il Db si lamentano? Se sì, qual è la pratica migliore per impedire agli sviluppatori di saltare la loro esistenza? Se no, che cosa fare per evitare di cadere in una situazione in cui si finisce con una sola opzione di creare un record fittizio?

Grazie!

È stato utile?

Soluzione

Utilizzando record fittizi è inferiore per ottenere i vincoli di destra.

C'è spesso la tentazione di usarle perché utilizzando record fittizi può sembrare il modo più veloce per offrire una nuova funzionalità (e forse a volte lo è), ma non sono mai parte di un bene di progettazione, perché si nascondono differenze tra la logica del dominio e il modello di dati.

Altri suggerimenti

record fittizi sono necessari solo se il modellista non può cambiare facilmente definizione del database, il che significa che la definizione e / o il modello di dati è piuttosto male. Non si dovrebbe mai finire in una situazione in cui ci deve essere codice speciale nello strato di applicazione per gestire casi particolari nel database. Questo è un incubo di manutenzione garantito.

Ogni definizione buono o modello permetterà modifiche facilmente, senza "che colpisce il codice esistente".

Tutta la logica di business [che viene definita nel database] dovrebbe essere attuata mediante vincoli ANSI SQL, controlli e regole. (Naturalmente le strutture di livello inferiore sono già vincolati tramite Domini / Datatypes, ecc, ma io non li classificare come "regole aziendali".) Mi assicuro che io non finire per dover implementare manichini, semplicemente facendo quello.

Se ciò non può essere fatto, poi il modellista manca conoscenze ed esperienze. O requisiti di livello superiore come normalizzazione, sono state rotte, e che presenta ostacoli ai vincoli che dipendono loro attuazione; anche che significa il modellista fallito.

ho mai avuto bisogno di rompere questi vincoli, o aggiungere fittizio record (e ho lavorato su un sacco di basi di dati). Ho rimosso manichino record (e duplicati) quando ho rielaborate database creati da altri.

Non ho mai eseguito in tutta dover fare questo. Se avete bisogno di fare questo, c'è qualcosa di sbagliato con la vostra struttura dei dati, e sta andando a causare problemi a valle della linea per la segnalazione ...

Utilizzo Dummies è muto.

In generale si dovrebbe mirare a ottenere la vostra destra logica senza di loro. Li ho visti utilizzati anche, ma solo come una soluzione di emergenza. La descrizione sembra un po 'troppo come fare una pratica standard. Che potrebbe causare più problemi di quanti ne risolva.

L'unico motivo che posso vedere per l'aggiunta di record "dummy" è quando si dispone di un applicazione e database di progettazione seriamente male.

E 'sicuramente non è pratica comune.

Se la logica di business dipende da un record esistente, allora avete bisogno di fare una delle due cose: o fare in modo che un record corretto è stato creato prima di eseguire quella logica; o, cambiare la logica di prendere informazioni mancanti in considerazione.

Credo che qualsiasi situazione in cui qualcosa non è molto facilmente distinguibili come "business-logic" è una causa per cercare di pensare ad un modo migliore.

Il fatto che si parla "che indica un tipo: Dummy" mi porta a credere che si sta utilizzando un qualche tipo di ORM per gestire l'accesso dei dati. Un ottimo punto di controllo (anche se non l'unico) per le soluzioni ORM come NHibernate è che il codice sorgente descrive in modo molto esplicito i tuoi strutture di dati guidare la vostra applicazione. Questo non solo consente l'accesso di dati di essere facilmente gestito sotto controllo del codice sorgente, ma permette anche di facilitare il debug su tutta la linea dovrebbe verificarsi un problema (e diciamocelo, non è una questione di IF si verifica un problema, ma quando).

Quando si introduce una sorta di "stampella" come un record fittizio, si stanno ignorando il punto di un database. Un database è lì per far rispettare le regole contro i tuoi dati, nel tentativo di eliminare la necessità di questo genere di cose. Vi consiglio di dare un'occhiata al tuo logica prima applicazione, prima di ricorrere a questo tipo di tecnica. Pensate al vostro compagno di dev, o di un nuovo noleggio. E se hanno bisogno di aggiungere una funzionalità e dimenticare la tua piccola logica "record fittizio"?

Si menziona te nella tua apprensione domanda sentimento. Andare con il vostro intestino. Sbarazzarsi dei record fittizi.

Devo andare con la sensazione comune qui e argomentare contro i record fittizi.

Che cosa accadrà è che un nuovo sviluppatore non si sa su di loro e non il codice per gestire loro, o eliminare una tabella e dimenticare di aggiungere un nuovo record fittizio.

li ho sperimentato nelle basi di dati legacy e ho visto sia di quanto sopra citato accadere.

Anche il più lungo esistono più difficile è quello di portarli fuori e il codice più si deve scrivere per tener conto di questi record fittizi che potrebbe probabilmente sono stati rimossi se hai appena fatto il disegno originale senza di loro.

La soluzione corretta sarebbe quella di aggiornare la logica di business.

Per citare la tua spiegazione espansa:

Si supponga che si dispone di un oggetto pacchetto e si dispone di implementare una logica di business che un pacchetto senza alcun contenuto non può essere creato. Si è creato alcune regole livello di business e progettato il Db con i vincoli rilevanti. Ma dopo alcuni anni una nuova funzionalità viene richiesta e per realizzare questo bisogna essere in grado di creare un pacchetto senza contnent. Per ovviare a questo, si decide di creare un contenuto fittizio che non è visibile su interfaccia utente, ma si consente di creare un pacchetto vuoto.

Così la in una sola volta a un pacchetto w / o contenuto è stato valido in tal modo strato di business applicato esistenza di contenuti in un oggetto del pacchetto. Ha senso. Ora, se lo scenario del mondo reale è cambiato come ora c'è un motivo valido necessità di creare oggetti di pacchetto senza contenuto è lo strato logica di business, che deve essere cambiato.

Quasi universalmente usando "fittizio" nulla da nessuna parte è una cattiva idea e di solito indica un problema in attuazione. In questo caso si sta utilizzando dati fittizi per consentire "compliance" con uno strato di business che non è più rappresentare correttamente i vincoli del mondo reale del business.

Se il pacchetto senza contenuto non è valido, allora manichino di dati per consentire la "conformità" con lo strato di business è un hack insensato. In sostanza hai scritto le regole per proteggere il proprio sistema e poi come sta tentando di aggirare la propria protezione. D'altra parte se il pacchetto senza contenuto è valido livello di business, allora non dovrebbe essere far rispettare i vincoli fasulli. In nessuno dei due è esempio dati fittizi validi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top