Avatar billede mortenbock Nybegynder
16. februar 2008 - 13:00 Der er 12 kommentarer og
1 løsning

fange og behandleen ikke eksisterende class

Jeg arbejde med en applikation hvor jeg kan angive nogle controls ved at skrive et namespace og en class i en database.

For at give et eksempel, så vil jeg her gerne hente en control med nogle bog informationer i. Så angiver jeg dette i tabellen:

Namespace | Class
morten.books | book1
morten.books | book2
morten.books | book3

Lige nu kræver det så at jeg koder klasserne book1, book2, book3.

Men faktum er at de tre klasser er identiske, bortset fra én paramater: book_ID

Er der en måde hvor jeg i mit namespace kan fange kald til ikke eksisterende klasser, og således at navnet på den class der er forsøgt kaldt, bliver sendt videre til en generisk klasse?
Avatar billede dr_chaos Nybegynder
16. februar 2008 - 14:53 #1
Hvorfor har du book 1,2 og 3 ?
Kan du vise noget kode ?
Avatar billede nielle Nybegynder
16. februar 2008 - 19:50 #2
Hvis de tre klasser er identiske burde de også være repræsenteret ved en og samme klasse i stedet for tre forskellige klasser med identisk kode.

Hvis de hvær især har en forskellig værdi af book_ID skal de blot initialiseres med forskellige værdier i deres constructor.

(men så snakker vi om jo objekter af klasserne)
Avatar billede arne_v Ekspert
16. februar 2008 - 21:02 #3
Hvad betyder "fange kald til ikke eksisterende klasser" ?
Avatar billede mortenbock Nybegynder
17. februar 2008 - 10:19 #4
Tak for interessen for spørgsmålet. Jeg vil lige prøve at uddybe problemstillingen lidt.

Det som jeg er i gang med er at lave en udvidelse til Opensource CMS'et Umbraco. I umbraco arbejder man blandt andet med "macroer". Disse macroer kan så modtage nogle parametre, og danne noget indhold ud fra disse parametre.

Sådan en macro parameter kunne så være at jeg f.eks. ville vælge en bog fra en dropdown liste. Den eneste måde hvorpå jeg kan generere sådan en dropdown liste er at angive et namespace + class i databasen.

For at passe til dette eksempel ville de så hedde:

Namespace | Class
morten.books | krimier
morten.books | biografier
morten.books | fagbøger

Grunden til at jeg ikke kan løse det med én klasse pt er at jeg ikke selv har kontrol over constructoren (altså kaldet til klassen). Den bliver genereret automatisk af Umbraco.

Det vil så igen sige, at hvis jeg skal bruge en ny dropdown liste med bøger fra kategorien "madbøger", så er jeg nødt til at åbne min kode og skrive en ny klasse der så henter de relevante titler frem.

Det der ville være smart i denne sammenhæng var hvis jeg blot i databasen kunne angive en ny klasse, uden at skulle åbne/ændre/kompilere min kode.

Namespace | Class
morten.books | krimier
morten.books | biografier
morten.books | fagbøger
morten.books | madbøger

Og når der så fra Umbraco blev kaldt til klassen "madbøger", så kunne jeg, selvom klassen ikke eksisterer, returnere en dropdownliste med de rette bøger i.

Opklarer det lidt hvad det er jeg prøver at opnå?
Avatar billede dr_chaos Nybegynder
17. februar 2008 - 10:37 #5
Kan du ikke bare lave en type property.
Altså en form for bogtypeid eller evt en enum hvor du kan definerer forskellige type.
Avatar billede mortenbock Nybegynder
17. februar 2008 - 10:57 #6
dr_chaos>Jeg får ud fra du mener noget a'la:

Namespace | Class
morten.books | hentkategori(1)
morten.books | hentkategori(2)
morten.books | hentkategori(3)
morten.books | hentkategori(4)

Dette tror jeg bare ikke vil kunne lade sig gøre. Men det vil helt klart være den nemmeste måde, hvis det er muligt.

Men som udgangspunkt kan jeg ikke angive parametre når jeg kalder klassen, da det jo nettop sker i Umbraco kernen, og derfor ville jeg gerne "lytte" på hvad det er Umbraco forsøger at kalde, og så behandle de data.
Avatar billede nielle Nybegynder
17. februar 2008 - 11:26 #7
Jeg vil bestemt ikke udelukke at det kan lade sig gøre.

Rent faktisk ville sig sige at det sagtens kunne lade sig gøre hvis du selv havde styr over hele processen.

Men det har du jo ikke. Du er nødt til at finde en løsning som kan spille sammen med den indre mekanik af Umbraco. Så bliver det straks meget sværere, og det kræver nok et rimeligt grundigt indblik i hvad Umbraco egentlig laver når den loader en klasse. Jeg tror derfor at du har en meget bedre chance for at finde en løsning hvis du spørger direkte på Umbraco projektet.

Faktisk synes jeg at det lyder lidt som et problem de allerede er en eller anden form for løsning på.

Under alle omstændigheder er det teknologien ”Refleksion” der skal bruges. Jeg har skrevet en artikel om det her på Eksperten, og jeg synes at du skulle tage et kig på den for at få en ide om hvad det er du skal have gang i:

http://www.eksperten.dk/artikler/1173

... men langt den letteste løsning da må være bare at tilføje klassen i din kode og kompilere den igen.
Avatar billede mortenbock Nybegynder
17. februar 2008 - 20:35 #8
nielle> Pointen i det er lidt at jeg gerne ville lave så generel en løsning som muligt sådan at andre ikke-programmører selv kan tilføje nye data ved så at angive data i f.eks. en xml/config fil. For mig personligt er det ikke det store problem at kompilere det igen, men det kan være en stor udfordring for folk der bare har brug for funktionaliteten, men som ikke lige har VS ved hånden, eller .net kompetencer :-)

Jeg vil kigge på din artikel, og høre umbraco folkene omkring hvad der kan lade sig gøre med deres kode.
Avatar billede nielle Nybegynder
25. februar 2008 - 17:38 #9
Er du kommet vidre med denne her?
Avatar billede mortenbock Nybegynder
25. februar 2008 - 17:49 #10
Jeg har snakket med dem, og det lyder til at man bliver nødt til at ændre i Umbraco's core kode hvis dette skulle kunne lade sig gøre. Så jeg må gå en anden vej foreløbigt.

Jeg vil gerne give jer point, hvis I smider et svar :-)
Avatar billede nielle Nybegynder
25. februar 2008 - 18:29 #11
Svar :^)
Avatar billede dr_chaos Nybegynder
25. februar 2008 - 18:36 #12
Ingen til mig :)
Avatar billede nielle Nybegynder
25. februar 2008 - 20:54 #13
Takker for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester