Ik wilde even iets tegen jullie aanhouden. Ik ben verantwoordelijk geworden voor een webapplicatie die m.i. slecht is ontworpen. De site is opgezet in JSP files, maar ik denk dat het probleem zich vrij makkelijk laat vertalen naar ASP.NET of php.
Oorspronkelijke situatie
ASP programmeur zet (als Proof of Concept) een JSP site in elkaar. Dit is gedaan omdat mijn bedrijf zich ook wilde gaan richten op Java/J2EE technologieën. Omdat de betreffende programmeur hands-on aan de slag is gegaan, is de gehele webapplicatie nu een verzameling van jsp pagina's geworden, zonder goed gebruik te maken van OO concepten. Bijna alle BL zit in de JSP pagina's, evenals aanroepen naar de database. Voor de goede orde, het gaat hier om ongeveer 200 jsp pagina's. Als database wordt er gebruik gemaakt van Oracle 8i. Voor inserts/updates/deletes wordt gebruik gemaakt van een package met stored procedures en ook van triggers voor data-integriteit. Deze worden ook door mijn bedrijf onderhouden. Er zit dus ook een deel van de BL in die package.
Situatie na refactoring stap 1
De belangrijkste jeuk die ik voelde was om de SQL code uit de JSP pagina's te halen. Helaas kon ik dat niet zomaar doen, omdat dit qua budget niet mogelijk was. Dus heb ik de volgende strategie gevolgd: Bij iedere aanpassing die in vervolgtrajecten moesten worden gedaan op bestaande jsp pagina's heb ik alle sql en gerelateerde code uit de JSP pagina's gehaald en in een class file gestopt. Voor het gemak zal ik deze DatabaseFunctions.java noemen. Het enige wat teruggegeven wordt aan de JSP pagina is een resultset.
Ik besef mij dat dit nog steeds geen goed gebruik is van OO concepten, maar op deze manier scheidt ik in elk geval BL en presentatie van elkaar.
Het voordeel van deze strategie is dat aanpassingen vrij eenvoudig te controleren zijn, omdat de aangepaste pagina's sowieso worden gecontroleerd tijdens de testfase. Tevens kosten de aanpassingen vrij weinig tijd, zodat budgetten niet in gevaar komen.
Hoe nu verder?
Inmiddels (na ruim 2 jaar) zijn alle jsp pagina's aangepast en bevatten ze dus geen SQL statements meer. Maar dan is de grote vraag natuurlijk, wat is de volgende stap in de refactoring? Mijn eerste gedachte zou zijn om methodes uit DatabaseFunctions te gaan groeperen en in eigen class files te stoppen en tegelijkertijd value-objects te definieren en via Collections te gaan teruggeven ipv ResultSets. Een andere mogelijkheid die ik zie is het splitsen van de BL en de databaseaanroepen. Maar hoe denken jullie hierover? Gegeven de situatie, wat zou jij doen?
Mijn bedoelingen met dit topic zijn vooral het achterhalen van refactoring strategieën. Wat ik dus niet wil horen is dat de basis van dit project niet goed is en dat ik die eerst opnieuw moet opzetten, dit is bekend, maar vanwege budget niet aan de orde. Zie het maar als een huis dat al gebouwd is, het aanpassen van de fundamenten is kostbaar en gezien de financiële situatie van onze klant echt niet mogelijk.
Verder kan ik inhoudelijk weinig over de applicatie zeggen, omdat het om een product gaat dat relatief uniek is op de markt.
Oorspronkelijke situatie
ASP programmeur zet (als Proof of Concept) een JSP site in elkaar. Dit is gedaan omdat mijn bedrijf zich ook wilde gaan richten op Java/J2EE technologieën. Omdat de betreffende programmeur hands-on aan de slag is gegaan, is de gehele webapplicatie nu een verzameling van jsp pagina's geworden, zonder goed gebruik te maken van OO concepten. Bijna alle BL zit in de JSP pagina's, evenals aanroepen naar de database. Voor de goede orde, het gaat hier om ongeveer 200 jsp pagina's. Als database wordt er gebruik gemaakt van Oracle 8i. Voor inserts/updates/deletes wordt gebruik gemaakt van een package met stored procedures en ook van triggers voor data-integriteit. Deze worden ook door mijn bedrijf onderhouden. Er zit dus ook een deel van de BL in die package.
Situatie na refactoring stap 1
De belangrijkste jeuk die ik voelde was om de SQL code uit de JSP pagina's te halen. Helaas kon ik dat niet zomaar doen, omdat dit qua budget niet mogelijk was. Dus heb ik de volgende strategie gevolgd: Bij iedere aanpassing die in vervolgtrajecten moesten worden gedaan op bestaande jsp pagina's heb ik alle sql en gerelateerde code uit de JSP pagina's gehaald en in een class file gestopt. Voor het gemak zal ik deze DatabaseFunctions.java noemen. Het enige wat teruggegeven wordt aan de JSP pagina is een resultset.
Ik besef mij dat dit nog steeds geen goed gebruik is van OO concepten, maar op deze manier scheidt ik in elk geval BL en presentatie van elkaar.
Het voordeel van deze strategie is dat aanpassingen vrij eenvoudig te controleren zijn, omdat de aangepaste pagina's sowieso worden gecontroleerd tijdens de testfase. Tevens kosten de aanpassingen vrij weinig tijd, zodat budgetten niet in gevaar komen.
Hoe nu verder?
Inmiddels (na ruim 2 jaar) zijn alle jsp pagina's aangepast en bevatten ze dus geen SQL statements meer. Maar dan is de grote vraag natuurlijk, wat is de volgende stap in de refactoring? Mijn eerste gedachte zou zijn om methodes uit DatabaseFunctions te gaan groeperen en in eigen class files te stoppen en tegelijkertijd value-objects te definieren en via Collections te gaan teruggeven ipv ResultSets. Een andere mogelijkheid die ik zie is het splitsen van de BL en de databaseaanroepen. Maar hoe denken jullie hierover? Gegeven de situatie, wat zou jij doen?
Mijn bedoelingen met dit topic zijn vooral het achterhalen van refactoring strategieën. Wat ik dus niet wil horen is dat de basis van dit project niet goed is en dat ik die eerst opnieuw moet opzetten, dit is bekend, maar vanwege budget niet aan de orde. Zie het maar als een huis dat al gebouwd is, het aanpassen van de fundamenten is kostbaar en gezien de financiële situatie van onze klant echt niet mogelijk.
Verder kan ik inhoudelijk weinig over de applicatie zeggen, omdat het om een product gaat dat relatief uniek is op de markt.