Esistono flussi di lavoro o modelli di progettazione specifici che vengono comunemente utilizzati per creare applicazioni di programmazione funzionale di grandi dimensioni? [chiuso]


13

Ho esplorato Clojure per un po 'di tempo, anche se non l'ho usato su nessun progetto non banale. Fondamentalmente, mi sono appena sentito a mio agio con la sintassi e alcuni idiomi. Proveniente da un background OOP, con Clojure come il primo linguaggio funzionale in cui ho studiato molto, naturalmente non mi sento a mio agio con il modo funzionale di fare le cose.

Detto questo, esistono flussi di lavoro o modelli di progettazione specifici comuni alla creazione di applicazioni funzionali di grandi dimensioni? Mi piacerebbe davvero iniziare a utilizzare la programmazione funzionale "per davvero", ma temo che con la mia attuale mancanza di competenza, si tradurrebbe in un fallimento epico.

"Gang of Four" è un tale standard per i programmatori OO, ma c'è qualcosa di simile che è più diretto al paradigma funzionale? La maggior parte delle risorse che ho trovato hanno grandi pepite di programmazione, ma non fanno un passo indietro per dare un aspetto più ampio e più architettonico.


6
Alcuni dei modelli GOF sono in realtà solo soluzioni alternative nei linguaggi OO per le cose che la programmazione funzionale già fornisce. Vedi stackoverflow.com/q/327955
Robert Harvey,



Penso che ci sia un po 'troppo di attenzione sui modelli specifici di GoF / OOP in questa discussione. Qualcuno può pubblicare alcuni schemi specifici specifici di programmazione funzionale (che non cercano solo di dimostrare la banalità di GoF nei linguaggi funzionali)?
Daniel B,

Risposte:


3

Modelli di questo tipo sono generalmente sintomi di un modello sottostante rotto e inadatto.

OOP è rotto dal design, inadatto alla maggior parte delle sue applicazioni, quindi esplode con tutto ciò che i cosiddetti "modelli". Il modello funzionale è (solo un po ') più flessibile e la necessità di "schemi" non è così ovvia.

Una volta che inizi ad applicare un approccio orientato al linguaggio (naturale per i programmatori funzionali), usando o creando DSL per ogni specifico dominio problematico, scoprirai che nessun modello viene mostrato, perché stai sempre impiegando un modello adeguato per descrivendo un problema.

Naturalmente alcuni "schemi" o "ricette" ricorrenti di alto livello sono inevitabili anche nella matematica molto astratta, pulita e pura, ma sono di un tipo diverso e di un diverso livello di astrazione rispetto ai modelli GoF. Troverai utili le monadi, per esempio.


+1 per gli ultimi 2 paragrafi, penso che sia perfetto. Per quanto riguarda OOP, sono curioso di sapere quale sia la logica alla base della sua rottura, oltre al fatto che si tratta di uno strumento generico spesso applicato a problemi specifici (da cui derivano modelli di basso livello come quelli del GoF). Puoi elaborare in breve o pubblicare un link che riassuma la tua opinione?
Daniel B,

@DanielB, non c'è nulla di sbagliato in OOP in sé, ma il modo in cui viene solitamente applicato è totalmente rotto. Questo modello si adatta solo ad alcuni dei problemi del mondo reale (e brilla davvero lì, se applicato in modo appropriato), ma per il resto ha bisogno di tutte quelle stampelle e nastro adesivo per adattarsi. Vedi la mia risposta su programmers.stackexchange.com/questions/52608/… per esempio.
SK-logic,

OK, penso di essere sulla stessa pagina. In effetti, potrei aver fatto questa domanda esatta una volta prima, mi dispiace per quello - il modo in cui hai definito quella linea sembra che tu stia implicando di più.
Daniel B,

-3

Secondo la mia opinione personale, i modelli di design sono semantici. Ricordo di aver riscritto alcune delle mie vecchie app usando MVC solo per essere sicuro di aver capito il modello così come pensavo di averlo fatto. Ma, alla fine, non ho guadagnato nulla da MVC sul mio codice originale.

Tuttavia, se dovessi applicare il mio codice originale a un ambiente di sviluppo più ampio e dire a qualcuno che esiste un problema con questo determinato metodo ... sarebbe difficile per quello sviluppatore rintracciare il problema. TUTTAVIA, se dicessi che il ContractController è stato confuso per qualche motivo, saprebbe esattamente da dove cominciare.

I modelli di design sono fantastici ... ma come ho detto, penso che siano semantici!

EDIT: voi tipi di evangelisti mi spezzate. Come è mai stato sviluppato qualcosa senza MVC (o qualche altro modello di progettazione)!


2
semantic (sɪˈmæntɪk) - agg. 1. o relativo al significato o derivante da distinzioni tra significati di parole o simboli diversi 2. o relativo alla semantica (lo studio del significato) 3. logica interessata all'interpretazione di una teoria formale, come quando le tabelle di verità vengono fornite come un resoconto dei connettivi sentenziali
Robert Harvey,

+1 - il mio punto era che i modelli di progettazione sono semplicemente un mezzo di comunicazione!
aserwin,

I modelli di progettazione non sono solo un modo di comunicare; sono ricette concrete e ben comprese che possono essere implementate nel software per risolvere alcuni problemi comuni.
Robert Harvey,

Questo è ciò che dicono i libri. Ma in realtà non ho mai risolto un problema attraverso un modello di progettazione che non avrei potuto risolvere senza di esso. L'unico vantaggio che ho notato nella mia esperienza personale è la capacità di parlarsi del codice! ;)
aserwin,

1
Per quanto riguarda la modifica: preferiresti reinventare la ruota ogni volta che scrivi un nuovo bit di codice?
Robert Harvey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.