Avatar billede karitolsen Nybegynder
19. september 2010 - 14:14 Der er 7 kommentarer og
2 løsninger

Opdatere TextBoxe i Gui fra forretningslaget

Hej

Jeg har en GUI med en masse textboxe. 12 stk. ialt.
Jeg har 4 klasser i Forretningslaget (Kunder, Forretninger, Bank og et Tilsyn), i hvilke i alt 10 tråde laver nogle beregninger, hvis resultater skal vises i GUI'en. But how to do, når man vil opretholde lagstrukturen... ??

Karit :-)
Avatar billede arne_v Ekspert
19. september 2010 - 16:10 #1
Jeg kan se to mulige løsninger:

1) Lad front interfacet af business logic layer expose et synchroneous API. Så har du ikke problemet.

2) Lad business logic layer API expose et callback API, så presentation layer kan sende opdaterings delegate over.
Avatar billede karitolsen Nybegynder
19. september 2010 - 17:14 #2
Hmm. Forstår ikke ord som "synchroneous API", "expose" og "callback API". Men det er sikkert rigtigt det du siger :-)
Avatar billede arne_v Ekspert
19. september 2010 - 17:25 #3
"synchroneous API" betyder at PL kalder BLL og at metode kaldet venter indtil svaret er klar.

"callback API" betyder at PL giver BLL en metode som BLL skal kalde med svaret når det er klart.
Avatar billede bvli Praktikant
19. september 2010 - 20:37 #4
Eller lade BLL (Business Logic Layer) udstille nogle events som PL (Presentation Layer) abonnerer på.

Husk her, i din callback, at checke om du er i GUI-tråden inden du opdaterer kontrollen/textboxen
Avatar billede karitolsen Nybegynder
19. september 2010 - 21:55 #5
Det lyder meget rigtigt, det du siger, selvom jeg må indrømme, ikke at kunne kode det endnu. Jeg dropper den fine lagdeling for nu og må så implementere den, når jeg er blevet klogere.
Tak for dit kompetente bidrag.
Avatar billede bvli Praktikant
20. september 2010 - 10:00 #6
Jeg synes det ville være ærgerligt at droppe din lagdeling. Er der nogen speciel grund til, at dit business layer bruger tråde til at kalkulere? Ellers bør du overveje, som Arne skriver, at lade være med at bruge tråde og så lave en:

string SomeText = BusinesLayerObject.Calculate(...)
{
  //Calc
  return result as string;
}

for hver operation du har brug for i forretningslaget. (Altså et synkront interface - uden tråde til at lave beregninger).

Derefter kan du i dit præsentationslag bruge en BackgroundWorker (google den), til at kalde din BusinessObject.Calculate(...) og i dens Completed-event, kan du opdatere dine tekstboxe.

På den måde er du i gang - og du har stadig din lagdeling.


Den anden metode jeg nævner ovenfor med events er også en mulighed. Det vil dog så være allerbedst om du implementerede det via Async-mønsteret.

Google det - men hvis du ikke mener dig i stand til at at skrive kode der rejser et event endnu, vil jeg mene at det måske er lidt ambitiøst at gå i gang med.
Avatar billede janus_007 Nybegynder
20. september 2010 - 10:23 #7
Jeg giver bvli ret, altid ærgeligt at droppe et godt initiativ, på den måde lærer man aldrig noget :)

Men jeg ville nu blot benytte den klasse som Microsoft har til formålet: http://msdn.microsoft.com/en-us/library/system.threading.synchronizationcontext.aspx

Man kunne som bvli skriver godt bruge events og async, men prøv at kigge på SynchronizationContext, jeg tror du finder den nemmere :)
Avatar billede karitolsen Nybegynder
20. september 2010 - 16:33 #8
janus_007: Jeg har allerede lært meget af den opgave, også selvom jeg har droppet den fornemme lagdeling :-).

Jeg skal nok kigge nærmere på dit link og de andre gode ideer, i er kommet med. Tak.

/Karit :-)
Avatar billede janus_007 Nybegynder
20. september 2010 - 20:04 #9
Hej Karit

Når det så er sagt mht. lagdeling og det er vejen, så ligger der rigtigt mange gode diskussioner gemt.
Du vil sikkert støde på nogen som sværger til at lagdeling er pl-bl-dll/dal, og har skarpe holdninger til hvor hvad skal ske, undertegnede har efterhånden dannet sin egen mening om hvad man "normalt" får at vide/ læser sig til.
Start endelig en diskussion på Eksperten om emnet hvis du vil have input :)
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