Domanda

Sto creando un'applicazione Web che è un'app di gestione dei processi. A diversi tipi di dipendenti verrà mostrato un elenco di attività da eseguire e quando ognuna completa un'attività, viene spostata sul dipendente successivo su cui lavorare.

La gerarchia delle attività è Batch > Carica > Assemblaggio > Parte > Compito. Al momento ci sono 8 regole per determinare su quale attività deve essere eseguita per prima per ciascun tipo di dipendente. Queste regole si applicano alle dimensioni della parte e anche al modo in cui il completamento delle parti influirà sulla Gerarchia, ad esempio se la parte A è completata, allora completa un intero batch in cui la parte B non lo farà poiché non vi sono ancora altre parti rimanenti nel suo batch da completare.

Comunque, questo è il tono di ascensore di come funziona il sistema. Quello che sto cercando di capire è un modo efficiente, rapido e sostenibile di fare ciò tenendo presente che le regole potrebbero cambiare e aggiungere altre regole.

Inizialmente intendevo lasciare che il DB (sql 2005) facesse tutto il lavoro pesante ma temo che le regole più complicate saranno difficili da implementare con un DB. Quindi un'alternativa è estrarre un elenco di attività in un livello intermedio e creare una raccolta di oggetti e applicare ciascuna delle regole alla raccolta. Non ho dubbi sul fatto che ogni regola possa essere tradotta in T-SQL in modo isolato, ma ordinare fino a 8 criteri a seconda del tipo di attività sembra un sacco di seccatura.

Un vantaggio che posso vedere con l'approccio di livello intermedio è che posso creare un sistema più limitato in cui il flusso di attività può essere modificato, che sarebbe più difficile nel DB penso.

Quindi cosa consigliereste? C'è una terza alternativa a cui non ho pensato?

EDIT [1] Solo per qualificarlo un po 'di più, il DB non dovrebbe cambiare da quello in cui inizialmente lo sviluppo.

È stato utile?

Soluzione

È difficile determinare dai dettagli nella domanda. Tuttavia, inserendo la logica in un livello di logica aziendale (centrale), le regole aziendali potranno continuare a utilizzare lo stesso codice, indipendentemente dal database back-end. Al momento si specifica T-SQL ma è possibile che in futuro si passerà a un ambiente non SQL Server?

Altri suggerimenti

Quale piattaforma? .NET 3.5 introduce LinqToSQL che potrebbe rendere questo un punto controverso. È possibile utilizzare un modello di strategia per selezionare / creare una query appropriata in base al tipo di attività, quindi lasciare che LINQ esegua la traduzione in SQL. In questo modo è possibile compilare la query nel codice, ma comunque essere effettivamente eseguita sul DB.

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