2009-10-06 18 views
7

Mi chiedevo se esistono validi strumenti di refactoring per i database Oracle e in particolare per PL/SQL. Sto lavorando a un progetto in cui metà degli sviluppatori stanno lavorando con C# e l'altra metà sul db dove c'è uno schema ampio e complesso e una grande base di codice in pl/sql. Usiamo anche SQL Server ma il team di database funziona esclusivamente con Oracle.Strumenti di rifattorizzazione Oracle DB (PL/SQL)

Questa base di codice viene elaborata attivamente e viene sottoposta a refactoring in modo graduale, ma sono rimasto piuttosto sorpreso nel vedere quanto siano negativi gli strumenti di refactoring per Oracle (o almeno in confronto a Eclipse e Resharper).

Gli sviluppatori utilizzano Toad che ha solo il supporto per il refactoring di base (probabilmente perché sembra essere indirizzato più verso l'amministratore di db che lo sviluppo). In passato ho usato Toad ma ho sempre pensato che per pl/sql ci fossero più funzionalità per lavorare con il codice, ma non ci avevo mai pensato. Ora, per quanto posso vedere, gli unici refactoring che fornisce sono il metodo extract (procedura) e la ridenominazione variabile. Ho letto un articolo che confronta lo sviluppatore sql e lo sviluppatore pl/sql e questi non sembrano avere un supporto migliore per il refactoring. Ho dato una rapida occhiata al progetto di strumenti di dati di Eclipse ma non ho visto che hanno aggiunto il supporto del refactoring dall'ultima volta che l'ho usato (alcuni anni fa).

Per il server Sql esiste Refilatore Sql che, quando le strutture della tabella vengono modificate, viene propagata alle stored procedure. Questo per me è molto più pulito e meno incline all'errore rispetto al fatto che qualcuno aggiorni manualmente tutte le stored procedure. Ho usato una versione precedente di questi strumenti su un progetto in passato e sembravano abbastanza ok ma un po 'lenti, ma era qualche anno fa ed era ancora utilizzabile.

Qualcosa di simile per Oracle sarebbe già di grande aiuto per il nostro team di sviluppo, quindi apprezzerei alcune indicazioni su buoni strumenti di refactoring per Oracle, se esistono. Grazie, crocked

risposta

9

Come succede la "D" in ROSPO stand Developer non DBA. In effetti molti DBA anatematizzano il TOAD e altri strumenti simili.

Sei sfortunato. Per quanto ne so, non ci sono strumenti per il refactoring di PL/SQL. Il problema principale è che il refactoring come concetto viene dal paradigma OOP e PL/SQL non è orientato agli oggetti. Non supporta l'ereditarietà o il polimorfismo (*). Ciò significa che molte delle tecniche che sono alla base della pratica del refactoring classico (come definito da Fowler) - astrazione, interfacce, ecc. - non hanno analogie in PL/SQL.

Il corollario di questo è che le persone che sono abituate a refactoring come parte della loro casella degli strumenti concettuali tendono ad evitare la programmazione con PL/SQL. Una volta ho avuto un acceso dibattito sulla lista TDD su questo. Il risultato è che anche gli sviluppatori che hanno bisogno e apprezzato le virtù di PL/SQL preferiscono svilupparsi in lingue con un migliore supporto degli strumenti, nonostante la clausola n. 1 di the Agile Manifesto.

Lo strumento più importante per il refactoring è il test dell'unità automatizzato. Sebbene TOAD non abbia (credo) un test unitario integrato, la prossima versione di Oracle SQL Developer lo farà. Esistono anche strumenti di test unitari standalone. Di recente ne ho parlato un paio in another SO thread.

In termini di refactoring PL/SQL per abbinare le modifiche nel database, probabilmente la maggior parte delle interazioni con le tabelle dovrebbe essere annullata da API di tabella generate piuttosto che essere incorporate in PL/SQL transazionale. In questo felice regno non c'è bisogno di strumenti di refactoring, abbiamo solo bisogno di ri-generare le API pertinenti. Il post che ho collegato sopra menziona anche QCGU, uno strumento che può farlo.Naturalmente, quando abbiamo una base di codice PL/SQL che non è organizzata in questo modo, la vita è più difficile. Non sarete sorpresi di apprendere che non c'è molto supporto per l'implementazione di WELC di Feathers in PL/SQL.

(*) Sì, so che Oracle ha tipi ma sono (a) SQL non PL/SQL e (b) quante persone ci sono in realtà costruendo API che li utilizzano?

+0

+1 per la risposta completa. Dove dici: "probabilmente la maggior parte delle interazioni con le tabelle dovrebbe essere annullata da API di tabella generate piuttosto che essere incorporate in PL/SQL transazionale." hai qualche link \ risorse su cui puoi puntare su questo argomento? –

+1

Come per la maggior parte delle cose PL/SQL, Steven Feuerstein è l'uomo goto. In questo caso la sua presentazione Break Your Addiction To SQL è il punto di partenza. Prova a prendere una conferenza (è un grande presentatore) Sfortunatamente Internet non sembra averne una copia, ma le sue best practice lo menzionano molto: http://www.toadworld.com/Education/StevenFeuersteinsPLSQLExperience/ Trainingandpresentations/tabid/155/Default.aspx ... Anche il blog di Toon Koppleaars è molto buono sul tema della creazione di API PL/SQL: thehelsinkideclaration.blogspot.com – APC

+0

Grazie per avermi contattato in modo così veloce con i collegamenti ecc. - Sono d'accordo riguardo alle capacità di presentazione di Steven Feuerstein - Ho visto la mia prima presentazione del suo l'11 settembre! Sperando di poter essere risparmiato dal lavoro, così posso partecipare allo UKOUG il 30 e vedere sia lui che Tom lo stesso giorno. Grazie ancora –

Problemi correlati