Domanda

Ho fatto questo Wiki comunitario, in quanto alcuni potrebbero pensare che è aperto al dibattito e gli altri potrebbero pensare che sia una questione di usare le parole per dire ciò che realmente significa (in altre parole, si tratta di una questione di opinione che si tratti di una questione di opinione ).

C'è una domanda di carattere generale su SO su dichiarativa programmazione, che ha alcuni grandi risposte.

Ma io sono un po 'lanciata da questo post del blog da un evangelista di Microsoft.

  

Un vantaggio di dichiarativa   la programmazione è che è possibile indicare   ciò che si vorrebbe fare, ma non come   per farlo.

Fin qui, tutto bene -. Che è d'accordo con esattamente la risposta accettata sulla questione così, infatti

Ma poi controllare la parte di "Servizio di attuazione",

  

È possibile   basta guardare a poche decine di linee di XAML   il codice ed essere in grado di determinare come la   Servizio WCF è configurato e come il   workflow corrispondente è definito.

Dopo aver dato un'occhiata ad alcuni esempi, mi permetta di brevemente RISPONDO dicendo: "No, non posso". Ma piuttosto che flippantly respinge questa roba, cerchiamo di un'occhiata ai documenti .

C'è voluto un po ', ma finalmente la realtà ha raggiunto con la satira ... ma non è questo il punto - naturalmente non sono seriamente suggerendo di fare questo per esporre qualcosa di banale come aggiunta. Né sto lamentando la verbosità ridicola, e la strana idea che qualcuno potesse mai scrivere qualcosa di simile a mano -. Sembra più come l'output di un compilatore di un linguaggio leggibile

Il puzzle per me è che questo è affermato di essere "dichiarativo". E tuttavia il nucleo di esso è un'istruzione di assegnazione.

C'è di più qui :

  

servizi dichiarative sono definiti   dichiarativo in XAML e fornire   un altro strato di astrazione.   In sostanza, si crea un modello di   servizio definendo ciò che si desidera che il   servizio per fare piuttosto che come fare   esso. L'intero servizio può essere definito   dichiarativo, tra cui il   attuazione delle operazioni.

Quindi, se diciamo che dichiarativi o in modo dichiarativo tre volte, che lo rende dichiarativa. Gotcha. E se diciamo la frase magica "che cosa si vuole fare, piuttosto che come farlo", allora possiamo trascurare di notare che nella frase successiva, stiamo andando a specificare "l'attuazione delle operazioni", dopo tutto, e così abbiamo stanno per dire con precisione come farlo.

L'esempio in quella pagina è:

<wma:Sequence>
    <wma:WriteLine Text ='[String.Concat(String.Concat(String.Concat(String.Concat("Add(", CType(op1, Object)), ","), CType(op2, Object)), ") called")]' />
    <wma:Assign x:TypeArguments="xs:Int32" To="[result1]" Value="[op1 + op2]" />
</wma:Sequence>

Il che equivale a dire, il tutto (compresa una tonnellata di spazzatura ho tagliato fuori dall'esempio WF) è esattamente equivalente a:

void Add(int op1, int op2, out int result1)
{
    Console.WriteLine("Add(" + op1 + ", " + op2 + ") called");
    result1 = op1 + op2;
}

- un blocco di istruzioni, da eseguire nell'ordine in cui appaiono, e avere effetti collaterali. Ci sono degli elementi di attività di workflow corso per loop (ed è possibile scrivere i propri attività se WF non ha già la sua dichiarazione imperativa preferito). A quanto pare, "riscrittura il codice in un formato illeggibile" è la stessa cosa di "aggiunta di uno strato di astrazione".

Per ribadire, non è la verbosità illeggibile folle mi sto lamentando - è il fatto che è chiaramente Turing completa programmazione imperativa accadendo nella implementazione del servizio, quindi qual è il punto? Prima di conoscerla, saremo passando attraverso i nostri flussi di lavoro nel debugger, cercando di fIGURA quale istruzione di assegnazione mutato il cui valore, o perché il ciclo continua ad andare in giro per sempre.

(L'ironia è che nella versione C #, è un po 'più dichiarativa, perché non abbiamo specificato come i pezzi di spago dovrebbero essere concatenati, consentendo in tal modo il compilatore di generare un minor numero di chiamate al metodo Concat.)

lo fa scrivendo qualcosa in XML renderlo dichiarativa (oltre che meno leggibile)?

È stato utile?

Soluzione

Ancora un altro riconoscimento che l'utilizzo di XML con capacità diverse da formato di scambio succhia grande tempo.

Servizio "definizioni" in WCF sono stati dichiarativa fin dal primo giorno. Tuttavia, separando definizioni di interfaccia da definizioni dei servizi (con questo intendo ServiceContractAttribute et al) è, IMO, buona cosa. Tuttavia, utilizzando XML come linguaggio di programmazione veramente schifo.

Mi sento personalmente attacchi abbastanza spiegabile di puro terrore quando guardando questi documenti XML.

Altri suggerimenti

C'è una parte di Windows Workflow Foundation che non è molto discusso (al di fuori di Microsoft), che possono chiarire questo per voi.

Se si crea un progetto flusso di lavoro, e guarda nella casella degli strumenti, si vedrà un gran numero di "scatole e linee" che è possibile trascinare sull'area di progettazione. Si può avere l'impressione che si sono destinati a creare i flussi di lavoro da questo set di strumenti. Questo non è il caso.

Si sono tenuti all'autore personalizzato attività specifiche per il dominio del problema. Queste sono destinate ad essere collegato con i vari delle attività della scatola. Questi sono suscettibili di essere abbastanza attività di alto livello -. Cose come "valutare polizza di assicurazione" o "soggiorno cartella clinica del paziente"

Un flusso di lavoro dichiarativo (o servizio) saranno dichiarando come mettere insieme le attività specifiche del problema che hai a disposizione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top