Even op de hypothetische toer gaan 
Stel je hebt in SQL server 2 tabellen, de tabel 'Boek' en de tabel 'Auteur'. De tabel 'Boek' bevat gegevens over een boek, bijv ISBN, titel, aantal pagina's enzovoorts en de tabel 'Auteur' allerlei gegevens over een auteur.
Stel je schrijft code om deze gegevens te beheren, om dus boeken en auteurs toe te voegen, te verwijderen, te wijzigen enzovoorts. In procedurele top-down code zou je dan in C# met 1 enkele SQL connectie alles kunnen oplossen. Bij het toevoegen van een nieuwe boek en een nieuwe auteur zou je makkelijk onder elkaar code kunnen schrijven die met 1 enkele SQL connectie een record voor de auteur aanmaakt, en een record voor het boek. Abstract gezien:
1. Maak connectie object aan (SqlConnection)
2. Maak commando object aan (SqlCommand)
3. Voor SQL INSERT commando's uit voor resp. de auteur en het boek.
En klaar is kees.
Maar nu is deze code in zijn uiteindelijke vorm natuurlijk minder leesbaar en toegankelijk dan code die zou vertellen:
1. Maak instantie van Auteur klasse aan.
2. Ken de eigenschappen toe aan de public properties.
3. Voer de Insert method uit.
4 t/m 6. Doe hetzelfde met de Boek klasse.
In C#, betekent dit echter dat ik binnen elke klasse een eigen SQL connectie moet aanmaken, als ik deze niet via de constructor mee wil geven. Performance technisch ga ik er dus op achteruit, als ik de code echt abstract wil houden en geen connectie-object meegeef.
Nu is dus mijn vraag: hoe pak ik dit op een nette manier aan? Kom ik er niet omheen het SqlConnection object mee te geven, zodat ik in bijvoorbeeld de Insert method van de Auteur klasse en de Boek klasse dezelfde connectie wil gebruiken, net zoals bij de procedurele code. Of is er toch nog een andere manier zoiets dergelijks aan te pakken in C#?
Het liefst zou ik in de programmacode zelf zou abstract mogelijk werken met eigen klassen die dan weer de echte code bevatten, maar toch graag vermijden dat ik op een gegeven moment 1000 keer een SQL connectie aanmaak en sluit voor allerlei triviale dingen.
Ik hoop dat het verhaal duidelijk is en mensen hier hun eigen visie op kunnen geven
Bij voorbaat dank.
Stel je hebt in SQL server 2 tabellen, de tabel 'Boek' en de tabel 'Auteur'. De tabel 'Boek' bevat gegevens over een boek, bijv ISBN, titel, aantal pagina's enzovoorts en de tabel 'Auteur' allerlei gegevens over een auteur.
Stel je schrijft code om deze gegevens te beheren, om dus boeken en auteurs toe te voegen, te verwijderen, te wijzigen enzovoorts. In procedurele top-down code zou je dan in C# met 1 enkele SQL connectie alles kunnen oplossen. Bij het toevoegen van een nieuwe boek en een nieuwe auteur zou je makkelijk onder elkaar code kunnen schrijven die met 1 enkele SQL connectie een record voor de auteur aanmaakt, en een record voor het boek. Abstract gezien:
1. Maak connectie object aan (SqlConnection)
2. Maak commando object aan (SqlCommand)
3. Voor SQL INSERT commando's uit voor resp. de auteur en het boek.
En klaar is kees.
Maar nu is deze code in zijn uiteindelijke vorm natuurlijk minder leesbaar en toegankelijk dan code die zou vertellen:
1. Maak instantie van Auteur klasse aan.
2. Ken de eigenschappen toe aan de public properties.
3. Voer de Insert method uit.
4 t/m 6. Doe hetzelfde met de Boek klasse.
In C#, betekent dit echter dat ik binnen elke klasse een eigen SQL connectie moet aanmaken, als ik deze niet via de constructor mee wil geven. Performance technisch ga ik er dus op achteruit, als ik de code echt abstract wil houden en geen connectie-object meegeef.
Nu is dus mijn vraag: hoe pak ik dit op een nette manier aan? Kom ik er niet omheen het SqlConnection object mee te geven, zodat ik in bijvoorbeeld de Insert method van de Auteur klasse en de Boek klasse dezelfde connectie wil gebruiken, net zoals bij de procedurele code. Of is er toch nog een andere manier zoiets dergelijks aan te pakken in C#?
Het liefst zou ik in de programmacode zelf zou abstract mogelijk werken met eigen klassen die dan weer de echte code bevatten, maar toch graag vermijden dat ik op een gegeven moment 1000 keer een SQL connectie aanmaak en sluit voor allerlei triviale dingen.
Ik hoop dat het verhaal duidelijk is en mensen hier hun eigen visie op kunnen geven
Bij voorbaat dank.
Ask yourself if you are happy and then you cease to be.