Jump to content

C# inicializēt jaunu klasi balstoties uz atbildi no web servisa, bez switchiem


Sasa
 Share

Recommended Posts

nevertell

Vari turēt sarakstā/masīvā ekšenu/id pārus, ekšenos turēt konstruktorus. Saņem mesidžu, parsē cauri sarakstam, salīdzini id ar mesidžu, izpildi ekšenu. 

Tikai visiem tiem objektiem vajag vienu interfeisu, kas izpildīs visu, ko gaidi no tiem. Itkā jau var runtaimā izdabūt klases vārdu ārā, bet silti iesaku to nedarīt, labāk katrai klasei savu id ieliec, kas nav īsti saistīts ar klasi. 

http://stackoverflow.com/questions/3767942/storing-a-list-of-methods-in-c-sharp

Labots - nevertell
Link to comment
Share on other sites

Es gribu dabūt kaut ko tādu:
http://stackoverflow.com/a/462042

 

vienīgi man no web servisa nāk atbildes šādas: '1', '2', '3' ... (šo itkā tā kā varētu pārtaisīt)

 

Tik nevaru izdomāt kuru klasi no tām WS atbildēm izmantot, ja neko nepārtaisa un atbildes nāk kā '1', '2', '3' 

 

Pa lielam es gribu katram atbildes statusam sataisīt savu klasi kas saturēs normāli atbildi kas tad iekš WS ir noticis vai nav noticis, bez kopēja interfeisa visiem atbilžu tipiem neiztikt, vienk. to momentu neizprotu kuru atbildes klasi izmantot.

Link to comment
Share on other sites

Vēlos pēc SOLID principiem šo realizēt lai klase būtu atvērta paplašinājumiem bet aizvērta modifikācijām apmēram šādi (ja šo pareizi izprotu):

http://www.remondo.net/solid-principles-csharp-open-closed/

 

ar if'iem un switch'iem šis punkts tiek pārkāpts.

 

Sanāk ka tā ka es uz WS klientu padodu iespējamos atbilžu variantus kas būtu kā saraksts ar statusa kodu un šī statusa koda atšifrējums un tad jau no šī saraksta ar LINQ tiktu izfiltrēts vajadzīgais, tad man klienta klase būtu atvērta paplašināšanai bet aizvērta modifikācijai.


Domāju ka ar Factory patternu tikšu galā bet kaut kas tur man nelīmējas kopā līdz galam :(

Link to comment
Share on other sites

Lai arī principā šie principi ir labi un jauki, tomēr vienmēr jābūt uzmanīgam, lai nepārcenstos. Šie patterni atvieglo lielu, sarežģītu programmu rakstīšanu, taču mazām programmām tie tikai radīs apgrūtinājumus un liekus sarežģījumus. Apdomā labi, no kā ir jēga, un no kā nav. http://thecodelesscode.com/case/119

 

Varbūt vari vairāk pastāstīt par pašu Webservisu, citādi nevar saprast, kādu tieši apstrādes loģiku nepieciešams veikt. No šīs loģikas arī būs atkarīga implementācija.

Labots - Vilx-
Link to comment
Share on other sites

par web servisu man kalpo parasts PHP skripts, kas atkarībā no padotajiem parametriem atgriež 1, 2, 3 ... 1 - ok, 3 - lietotājs nav ielogojies, 2 - kaut kas lietotājam nav. 

Tiem 1 2 3 vajag atšifrējumus, tad nu doma ka varētu izveidot atbilžu klases ar stausa kodu un statusa tekstu. 

Link to comment
Share on other sites

Tātad, tas webserviss atgriež tieši 1 simbolu? OK... Nezinu, kaut kas tur neož riktīgi. Webservisa izsaukums principā ir analogs funkcijas izsaukumam. Ja funkcija ir dokumentēta, ka atgriež 3 dažādas vērtības, tad Tu tās tā arī apstrādā, ar if'u vai switch'u. Tur nav nepieciešamas kaut kādas jokainas klases. Parasti.

 

Davai, izstāsti visu savu stāstu pilnībā no A līdz Z, ar paplašinātiem teikumiem un visām detaļām. Te vajag redzēt kopbildi. Citādi Tu uzdod nepareizos jautājumus, mēs dodam nepareizās atbildes, un beigās sanāks kaut kāds murgs.

Link to comment
Share on other sites

Saprasts viss tiek pareizi, vienkārši mulsina mana, iespējams, liekā sarežģīšana :) 

 

Process man šāds:

1. C# pusē ar HttpWebRequestu veicu pieprasījumu uz PHP skriptu, padodu dažus parametrus

2. PHP pusē notiek pārbaudes un tiek echo'ti 1, 2, 3 - atkarībā kā nu tur novalidējas padotie parametri. 

3. C# saņem responsi no HttpWebRequesta kā vienkāršu stringu 1 vai 2 vai 3 - šiem man vajag atšifrējumu ko PHP nesūta.

 

protam ka tos 1 2 3 var ielikt switcha un ar to viss būtu paveikts

Link to comment
Share on other sites

Tad es teiktu, ka šajā gadījumā arī liec tajā switch'ā un āmen. Tas būs jauki un lasāmi. A citādi, ja katru rindiņu koda sāks likt savā klasē, tad toč būs gals klāt.

 

Saproti jel - visas programmēšanas valodas, visas paradigmas, visi freimworki un patterni - tas viss ir radīts, lai cīnītos ar tieši vienu problēmu, kas ir programmēšanas pamatā - programmas ir fakin piņķerīgas. Kodu ir viegli uzrakstīt, bet grūti izlasīt. Mazas programmas satur vairākus tūkstošus rindiņu koda, lielas satur miljonus. Tas ir apjoms, ko nav iespējams paturēt galvā. Jebkuru programmu var uzrakstīt vienā plakanā funkcijā izmantojot tikai if'us un goto. Bet tam neviens nespēs izburties cauri, kad vajadzēs salabot kādu kļūdu vai pielikt kādu jaunu fīču. Tāpēc ir izdomāti visi šie līdzekļi, lai kodu sadalītu mazākos gabaliņos, kuri savā starpā sastrādājas, bet kurus var lasīt katru neatkarīgi no citiem, un kuru jēgu var aprakstīt 1-2 vienkāršos teikumos.

 

Taču, ja Tev jau tāpat ir maz koda, tad dalīt to vēl mazākos gabaliņos tikai sarežģī lietas, nevis vienkāršo.

 

Es ieteiktu rīkoties tā - ja vien jau no paša sākuma nav skaidri redzams, ka konkrētajā vietā derēs patterns X, tad uzraksti to bez tā patterna. Ja kods ir grūti lasāms (vai arī vēlāk apaug un paliek grūti lasāms), tad sāc domāt, kā to pārrakstīt izmantojot kādu patternu, kurš atvieglotu lasīšanu.

Link to comment
Share on other sites

nevertell

Kamēr gaidi 3 dažādus stringus, switch's ir jauks. Bet ja piemēram gribi "dinamiski" mainīt sagaidāmās atbildes, daudz vieglāk būs tikt galā ar polimorfismu. Itkā jau reāli beigās izpildās viens un tas pats- ej cauri sagaidāmajām atbildēm, salīdzini ar to, ko esi saņēmis, izpildi attiecīgo kodu priekš attiecīgās atbildes. 

Link to comment
Share on other sites

Protams. Bet tur jau arī ir atšķirība - vai Tev ir 3 dažādas atbildes, vai 30. Vai vajag tur kaut kādu dinamisku apstrādi, vai nevajag. Risinājums ir atkarīgs no uzdevuma.

Link to comment
Share on other sites

nevertell

Tu vari uzrakstīt vienu klasi priekš visiem variantiem, kur tu gaidi kādas rekvestus/atbildes un vajag ģenerēt atbildes/apstrādāt datus. Tu vari katram gadījumam rakstīt jaunu kodu, palielinot iespēju, ka kautkur kautkas nestrādās, vai arī tu vari uzrakstīt vienu klasi un lietot to visur. Vēljovairāk, tev būs kods, kas strādās arī citos projektos. Kodu vajag rakstīt īsu, lai iespēja, ka būs stulbas kļūdas, būs mazāka. 

Do you even OOP ? 

Link to comment
Share on other sites

nevertell

Es saprotu, ko autoram vajag, vilkusun. Sasa bieži prasa padomus par C#, visticamāk tikai mācās. Kāpēc nepastāstīt par plašākām iespējām ? 

Link to comment
Share on other sites

Katru lietu var risināt daudz un dažādos veidos. Tostarp arī autora problēmu. Labam programmētājam ir ne tikai jāzin šie veidi, bet arī jāprot izvēlēties situācijai piemērotākais.

 

Šajā konkrētajā gadījumā, kur autoram ir tikai 1 veida pieprasījums un tikai 1 veida atbilde ar potenciāli 3 dažādām vērtībām, nav vērts taisīt baigo freimworku. Vienkāršs switch būs viselegantākais risinājums.

 

Protams, ja servisam būtu daudz dažādu izsaukumu, kur katram izsaukumam var būt dažāda veida kompleksas atbildes - tad jā, tad jādomā kaut kas elastīgāks.

Link to comment
Share on other sites

nevertell

 

 

Kamēr gaidi 3 dažādus stringus, switch's ir jauks. 

Es saku, ka tieši šajā gadījumā jālieto kautkas sarežģīts ? Vēl viena lieta- vai pat šādā gadījumā, neskaitot to, ka saraksts būtu jāinicializē un jāpiepilda runtaimā, vai būtu kādi veiktspējas zudumi ? 

Vilk, būs labi. Svičus vēl lietos ilgi. 

Link to comment
Share on other sites

Es saku, ka tieši šajā gadījumā jālieto kautkas sarežģīts ?

Nu, tā es uztvēru šo postu. Sorry, ja esmu pārpratis.

 

Tu vari uzrakstīt vienu klasi priekš visiem variantiem, kur tu gaidi kādas rekvestus/atbildes un vajag ģenerēt atbildes/apstrādāt datus. Tu vari katram gadījumam rakstīt jaunu kodu, palielinot iespēju, ka kautkur kautkas nestrādās, vai arī tu vari uzrakstīt vienu klasi un lietot to visur. Vēljovairāk, tev būs kods, kas strādās arī citos projektos. Kodu vajag rakstīt īsu, lai iespēja, ka būs stulbas kļūdas, būs mazāka.  Do you even OOP ?

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...