Een van de dingen waar ik me aan erger bij het ontwikkelen van code is dat er vaak zoveel overhead is. De simpelste dingen kosten veel werk als je het op de 'robuuste' manier wilt doen. Ik ben helemaal voor de robuuste manier, maar in veel gevallen (vooral als je in de leafs van je systeem zit), dan is er bv weinig voordeel te halen. Je gaat niets re-usen aangezien het zo specifiek is. De code wordt nooit in een andere context gebruikt dus waarom nog letten op access modifiers? Waarom nog letten op losse files?
Daarom kijk ik de laatste tijd wel anders aan tegen deze 'leaf' code, en misschien is dat bv een goeie plek om wel scripttalen te gebruiken. Ik werk zelf (zoals iedereen wel weet) met Spring en ik zie dat heel veel van dit soort 'leaf' code verplaatsen naar Spring. Dit heeft als voordeel dat ik minder classes in mijn systeem krijg (en daarom het systeem imho ook veel beter te begrjpen is). Verder heb ik ook geen verplichtingen van dit soort code meer en een van de gevolgen is, is dat mijn software meer agile is. Je kunt Spring dan zien als een scripttaal (met een hoogst twijfelachtige syntax).
Een voorbeeld van de twijfelachtige syntax:
Het enige dat ik hier doe is een 2 methodes aanroepen op een paar object...
In het algemeen denk ik ook dat Scripttalen voor de grenzen van een systeem wel eens een oplossing kunnen zijn. Zeker als je kijkt dat je bijna per definitie een betere syntax krijgt dan xml.
Waar ik op dit moment wel bang voor ben is refactoring, aangezien scripttalen niet worden geanalyseerd door ide`s.
Een ander punt waar ik me de laatste tijd weer aan heb zitten ergeren zijn exceptions. Ik werk veel met layering in mijn systemen en dan moet je exceptions van lagere layers vertalen naar exceptions van hogere layers, zodat er geen dependencies naar diepere lagen ontstaat. In sommige gevallen is dit perfect.. exceptions vertalen naar lager abstractie nivo (wrappen dus) en voorzien van meer betekenis volle fouten. Dus ipv een 'error op #1F49:AE57 in controller #2394' krijg je een 'het bestand kon niet opgeslagen worden' (eventueel met een cause). Je moet er wel voor zorgen dat alle acties die een gebruiker heeft uitgevoerd met een try catch(alles) worden uitgevoerd.. (voor zover je dat nog niet had gedaan
)
Maar in veel gevallen, zijn het exceptions, waarvan ik weet dat ze op hoger nivo toch niet afgehandeld gaan worden. Voorbeeld hiervan zijn IOExceptions in Lucene (een searchengine voor Java). Als een fout zich voordoet dan (en dat kan gewoonlijk nooit gebeuren), dan weet ik dat ik op hoger nivo hier toch niets zinnigs mee ga doen. Maar toch sleep ik die exception mee naar boven in de lagen (en bij iedere laag transformeer ik de exception).. Ik heb daarom een van de mission statements van Spring er bji gepakt Checked exceptions are overused in Java. A framework shouldn't force you to catch exceptions you're unlikely to be able to recover from.
En idd.. ik moet dit keer toegeven dat in veel gevallen ik wel de prijs betaal van die exception afhandeling (lees wrappen en doorgooien omhoog), maar er totaal niets mee doe. Daarom kan ik hier ook weer wat onnodige code besparen. Verder is dit gebied voor mij wel nieuw dus ik zet nog wel met een aantal vragen en daar zal ik eerst eens goed over na moeten denken.
Wat is verder jullie idee over minder code? Over de 'logheid' van niet-script talen?
Daarom kijk ik de laatste tijd wel anders aan tegen deze 'leaf' code, en misschien is dat bv een goeie plek om wel scripttalen te gebruiken. Ik werk zelf (zoals iedereen wel weet) met Spring en ik zie dat heel veel van dit soort 'leaf' code verplaatsen naar Spring. Dit heeft als voordeel dat ik minder classes in mijn systeem krijg (en daarom het systeem imho ook veel beter te begrjpen is). Verder heb ik ook geen verplichtingen van dit soort code meer en een van de gevolgen is, is dat mijn software meer agile is. Je kunt Spring dan zien als een scripttaal (met een hoogst twijfelachtige syntax).
Een voorbeeld van de twijfelachtige syntax:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| <bean class="com.jph.spring.MethodInvokingSequenceJobDetailFactoryBean"> <property name="methodInvokerList"> <list> <bean class="org.springframework.util.MethodInvoker"> <property name="targetObject"> <ref bean="indexWriter"/> </property> <property name="targetMethod"> <value>processQueue</value> </property> </bean> <bean class="org.springframework.util.MethodInvoker"> <property name="targetObject"> <ref bean="baseSearcher"/> </property> <property name="targetMethod"> <value>refreshReader</value> </property> </bean> </list> </property> <property name="concurrent"> <value>false</value> </property> </bean> |
Het enige dat ik hier doe is een 2 methodes aanroepen op een paar object...
In het algemeen denk ik ook dat Scripttalen voor de grenzen van een systeem wel eens een oplossing kunnen zijn. Zeker als je kijkt dat je bijna per definitie een betere syntax krijgt dan xml.
Waar ik op dit moment wel bang voor ben is refactoring, aangezien scripttalen niet worden geanalyseerd door ide`s.
Een ander punt waar ik me de laatste tijd weer aan heb zitten ergeren zijn exceptions. Ik werk veel met layering in mijn systemen en dan moet je exceptions van lagere layers vertalen naar exceptions van hogere layers, zodat er geen dependencies naar diepere lagen ontstaat. In sommige gevallen is dit perfect.. exceptions vertalen naar lager abstractie nivo (wrappen dus) en voorzien van meer betekenis volle fouten. Dus ipv een 'error op #1F49:AE57 in controller #2394' krijg je een 'het bestand kon niet opgeslagen worden' (eventueel met een cause). Je moet er wel voor zorgen dat alle acties die een gebruiker heeft uitgevoerd met een try catch(alles) worden uitgevoerd.. (voor zover je dat nog niet had gedaan
Maar in veel gevallen, zijn het exceptions, waarvan ik weet dat ze op hoger nivo toch niet afgehandeld gaan worden. Voorbeeld hiervan zijn IOExceptions in Lucene (een searchengine voor Java). Als een fout zich voordoet dan (en dat kan gewoonlijk nooit gebeuren), dan weet ik dat ik op hoger nivo hier toch niets zinnigs mee ga doen. Maar toch sleep ik die exception mee naar boven in de lagen (en bij iedere laag transformeer ik de exception).. Ik heb daarom een van de mission statements van Spring er bji gepakt Checked exceptions are overused in Java. A framework shouldn't force you to catch exceptions you're unlikely to be able to recover from.
En idd.. ik moet dit keer toegeven dat in veel gevallen ik wel de prijs betaal van die exception afhandeling (lees wrappen en doorgooien omhoog), maar er totaal niets mee doe. Daarom kan ik hier ook weer wat onnodige code besparen. Verder is dit gebied voor mij wel nieuw dus ik zet nog wel met een aantal vragen en daar zal ik eerst eens goed over na moeten denken.
Wat is verder jullie idee over minder code? Over de 'logheid' van niet-script talen?
[ Voor 87% gewijzigd door Alarmnummer op 11-04-2005 11:48 ]