Toon posts:

[C# / .Net] Herbruikbare code-elementen

Pagina: 1
Acties:

Onderwerpen


  • saillemuin
  • Registratie: oktober 2008
  • Laatst online: 22-06 06:46
Ik ben al een tijdje opzoek (zowel via google/tweakers zoekmachines) naar een oplossing voor volgend probleem :

Ik beheer/ontwikkel op de firma verschillende webprogramma's geschreven in C# - Visual Studio 2008.
We werken met verschillende mensen aan andere programma's, maar dus wel 1 persoon per programma.

Het komt meer dan regelmatig voor dat bepaalde onderdelen van een webpagina (dus zowel de frontend-layout als de back-end code op een aantal variabelen na) identiek zijn over de verschillende websites/programma's heen.
Identiek in die zin dat ze voor de gebruiker er hetzelfde uitzien en hetzelfde doen, maar achterliggend worden er andere databanken aangesproken, andere queries uitgevoerd, ...

We hadden nu graag suggesties om de herbruikbaarheid van deze 'widgets' te implementeren.
Momenteel gebeurd dit tot schaamte via de copy-paste methode, met alle nadelen tot gevolg wanneer er een module dient aangepast te worden.

Is er hiervoor een component voorzien in Visual Studio ? Dienen we te werken met zeer uitgebreide custom controls ? Alle suggesties zijn welkom.

  • HansvDr
  • Registratie: augustus 2009
  • Niet online
Je zou een eigen dll kunnen maken met gedeelde code + een eigen website template waar al je standaard spul inzit.

Het Template op een netwerklocatie opslaan en deze door 1 persoon laten beheren.

  • Mavamaarten
  • Registratie: september 2009
  • Laatst online: 21:45

Mavamaarten

Omdat het kan!

Dat zou ik idd ook doen, een eigen DLL schrijven met alle belangrijke functies, die je dan elk importeert.

Android developer & dürüm-liefhebber


  • lier
  • Registratie: januari 2004
  • Laatst online: 24-09 15:01

lier

MikroTik nerd

"Zeer uitgebreide custom controls" is een nogal abstract begrip. Volgens mij bestaan de meeste websites wel uit dezelfde (herbruikbare) controls waarbij je bijvoorbeeld alleen een andere datasource hebt.

Wat (inderdaad) een mooie oplossing is is om een library van van alles te maken dat herbruikbaar is. Denk bijvoorbeeld aan controls om gegevens te presenteren, maar er zijn natuurlijk tal van oplossingen.

Voordelen lijken mij evident, enige uitdaging die je misschien hebt is "wie gaat er voor betalen". Vaak ben ik situaties tegen gekomen waarbij deze controls als onderdeel van een project gebouwd worden waarna ze vervolgens overal toegepast kunnen worden.

Overigens is deze methode nogal gebruikelijk, misschien moet je je de vraag stellen waarom hieraan nooit gedacht is ;) .

Eerst het probleem, dan de oplossing


  • saillemuin
  • Registratie: oktober 2008
  • Laatst online: 22-06 06:46
Een eigen dll met meest gebruikte functies is er al, qua code is de herbruikbaarheid op een redelijk niveau.
Het is me nog niet volledig duidelijk hoe we veelvoorkomende website-onderdelen dan qua html herbruikbaar kunnen maken ?

Ik schets even een voorbeeld :
We hebben een <fieldset> met verschillende asp:Textboxen, asp:DropDownLists en asp:Buttons in.
Deze fieldset komt in verschillende programma's terug met identieke weergave en functionaliteit, het enige wat verschillend is zijn de tabellen/veldnamen die aangesproken worden op de dropboxen te gaan opvullen en de tabellen/veldnamen waarin de ingevulde data wordt opgeslaan.

Ideaal zou zijn dat we via een bepaald werkwijze (ben ik dus naar op zoek) ervoor kunnen zorgen dat de html en codebehind kan gegenereerd worden en dat de nodige parameters (namelijk welke databank, welke velden enzovoort) kunnen meegegeven worden.

Als er dan iets gewijzigd dient te worden aan de layout, codebehind van het element dan dient het maar op een plaats aangepast te worden en nemen de programma's die het element gebruiken de aanpassingen automatisch over.

  • RobIII
  • Registratie: december 2001
  • Laatst online: 23:03

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

saillemuin schreef op donderdag 07 oktober 2010 @ 11:30:
We hebben een <fieldset> met verschillende asp:Textboxen, asp:DropDownLists en asp:Buttons in.
Deze fieldset komt in verschillende programma's terug met identieke weergave en functionaliteit, het enige wat verschillend is zijn de tabellen/veldnamen die aangesproken worden op de dropboxen te gaan opvullen en de tabellen/veldnamen waarin de ingevulde data wordt opgeslaan.

Ideaal zou zijn dat we via een bepaald werkwijze (ben ik dus naar op zoek) ervoor kunnen zorgen dat de html en codebehind kan gegenereerd worden en dat de nodige parameters (namelijk welke databank, welke velden enzovoort) kunnen meegegeven worden.
Dus je hebt je controls rechtstreeks aan DB velden gekoppeld? Dan zit daar je probleem ;) Je presentatielaag hoort helemaal geen kennis te hebben van je datalaag of worse: je onderliggende DB; dat abstraheer je normaliter in je BL danwel model in een MVC setup.

[Voor 25% gewijzigd door RobIII op 07-10-2010 12:00]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • saillemuin
  • Registratie: oktober 2008
  • Laatst online: 22-06 06:46
De controls worden momenteel van data voorzien via functies in de gedeelde ddl file opgenomen in de CodeBehind van de webpages.

Ik weet nu niet als ik hiermee aan alle voorwaarden van MVC setup voldoe, maar indien ik een volledige MVC setup zou hebben dan kan ik nog altijd niet stukken html+code-behind genereren naar mijn mening.

Of zie ik nu helemaal het bos door de bomen niet meer ?

  • Hydra
  • Registratie: september 2000
  • Laatst online: 15:51
Wat is het probleem nu precies? Verandert de binding tussen de controls en de data, of verandert de layout en kleurtjes enzo die uiteindelijk op het scherm komen te staan?

Normaal is het Control > Businesslaag > ORM > Database. Controls horen absoluut geen weet te hebben van de database. En hoe je businesslaag gemapt wordt op de database regel je in je ORM. In Hibernate leg je dat vast in XML cofiguratiefiles bijvoorbeeld.

En hoe de HTML die de controls uiteindelijk uitspugen precies smoelt regel je in je stylesheets.

https://niels.nu


  • saillemuin
  • Registratie: oktober 2008
  • Laatst online: 22-06 06:46
De binding tussen de controls en de data verandert, layout enzo ook maar dat is totaal geen probleem.
De acties die de controls uitvoeren blijven identiek (behalve de datasource) en ze hebben geen weet van de databank, alles verloopt via functies in de dll.

Ik wil gewoon vermijden om telkens de codebehind/html te moeten kopiëren en enkele parameters te veranderen.

  • Hydra
  • Registratie: september 2000
  • Laatst online: 15:51
saillemuin schreef op donderdag 07 oktober 2010 @ 14:01:
De binding tussen de controls en de data verandert, layout enzo ook maar dat is totaal geen probleem.
De acties die de controls uitvoeren blijven identiek (behalve de datasource) en ze hebben geen weet van de databank, alles verloopt via functies in de dll.
Dan maak je dat toch configureerbaar?
Ik wil gewoon vermijden om telkens de codebehind/html te moeten kopiëren en enkele parameters te veranderen.
Ik zei dus; stylesheets?

https://niels.nu


  • saillemuin
  • Registratie: oktober 2008
  • Laatst online: 22-06 06:46
Indien het configureerbaar zou zijn, dan moet ik toch nog altijd copy pasten ? Sorry maar het wordt me nog verwarrender. Waarschijnlijk slaag ik er niet in om mn probleem duidelijk te maken.

Met parameters die moeten veranderen bedoel ik : met welke datasource dropdownlists opgevuld worden bv. geen layoutaanpassingen.

Ik probeer nogmaals een voorbeeld te geven, dit keer een concreet fictief voorbeeld :
- we hebben verschillende programma's met klantgegevens (naam/adres/...) en één dropdownlist over het type klant
- in deze programma's wordt het bovenstaande telkens op dezelfde manier weergegeven
- bij het wijzigen van de dropdownlist wordt de wijziging opgeslaan in de database

Per programma dient het resultaat in een andere databank/tabel opgeslaan te worden en is er een andere inhoud van de dropdownlist.

Wanneer we nu opdracht krijgen om nog een tweede dropdownlist (die ook opslaat bij het wijzigen) te gaan toevoegen aan de klantgegevens (bv. land van herkomst) dan dienen we alle programma's waar de klantgegevens in verwerkt zijn aan te passen :
- aspx files moeten uitgebreid worden met de dropdownlist
- de codebehind acties voor het opslaan van de data bij wijzigen van de dropdownlist dienen aangemaakt te worden

We hadden graag een oplossing om ergens centraal 1 extra dropdownlist toe te voegen in een bepaalde template.
Uiteraard moet in elk programma apart dan meegegeven worden in welke databank/tabel de gegevens van de dropdownlist dienen opgeslaan te worden, maar dit is aanzienlijk minder werk dan het copy/pasten van html/c# code.

  • HansvDr
  • Registratie: augustus 2009
  • Niet online
Wij gebruiken daarvoor de myGeneration code generator.

Daar kun je met een simpele syntax eigen templates bouwen die je laat vullen afhankelijk van je database ontwerp.

Ik genereer er mijn eigen classes mee maar ook "edit" pagina's met daarin dus input velden e.d. met de juiste namen, de codebehind erbij die de juiste class en methods aanroept.

1 x een default bouwen die voldoet dus en hier een template voor maken in mygeneration.

[Voor 5% gewijzigd door HansvDr op 07-10-2010 15:57]


  • AtleX
  • Registratie: maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Prop die controls in een custom control die je ergens in een libje wegstopt. Die custom control heeft een datasource property die je kan gebruiken voor databinding. In de custom control kan je dan de datasource gebruiken om de verschillende controls te vullen. Even simpel gezegd dan, want ik vermoed dat jullie wel meer problemen hebben dan alleen de (basic) herbruikbaarheid van componenten.

[edit]
En bij datasource bedoel ik dan niet een DB-verbinding oid he? ;) Gewoon een IEnumerable of IQueryable met de data die verwacht wordt. Wil je gaan saven? Gewoon die data weer uit je datasource halen in de code-behind oid en die dan naar je BL sturen. Anders ben je in je control nog steeds afhankelijk van de database, en da's een afhankelijkheid die je op dat niveau niet wilt.

[Voor 33% gewijzigd door AtleX op 07-10-2010 16:18]

12x360Wp = 4320 Wp @ Growatt 4200TL-XL. Zuid met helling 13° op plat dak.


  • RobIII
  • Registratie: december 2001
  • Laatst online: 23:03

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Kijk eens naar de, visual studio eigen maar erg onbekende, T4. Daar kun je heel kekke kunstjes mee uithalen.

Linkjes:
http://www.hanselman.com/...ptVisualStudioSecret.aspx
http://t4-editor.tangible...or-Visual-T4-Editing.html
http://visualstudiomagazi...s-t4-code-generation.aspx

[Voor 7% gewijzigd door RobIII op 07-10-2010 16:07]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • saillemuin
  • Registratie: oktober 2008
  • Laatst online: 22-06 06:46
Bedankt voor de feedback, ik lees alles even door en ga dan aan de slag !

  • keesdewit
  • Registratie: december 2003
  • Laatst online: 22:15
Je kunt een user control maken die via properties bestuurbaar is. Deze controls kun je opnemen in een apart project die vervolgens als assembly wordt ingeladen in de applicatie die de controls gaat gebruiken. Eigenlijk hetzelfde principe als dat je een control van bijvoorbeeld telerik gebruikt, alleen nu bepaal je zelf wat de properties/functionaliteit is.

[Voor 9% gewijzigd door keesdewit op 09-10-2010 11:42]


  • HansvDr
  • Registratie: augustus 2009
  • Niet online
Is mij bekend maar de MyGeneration templates hebben we al wat jaartjes en omdat nu om te gaan zetten in T4 daar ontbreekt ons de tijd voor...
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee