Cosa e quanto codice di dominio deve essere inserito in un modulo F #

5

In base alle raccomandazioni fornite qui , i moduli F # devono corrispondere ai contesti delimitati da DDD, ovvero suddivisioni di un dominio aziendale.

Il contesto limitato su cui sto lavorando ora ha 2 aggregati per una dozzina di tipi, più alcune funzioni / algoritmi piuttosto complessi. Se seguo lo stile prescritto, finisco con un file LOC 500+, che IMO non è molto leggibile o navigabile, e crescerà solo di più. Sfortunatamente, sembra che i moduli F # non possano essere suddivisi su più file .

Altre soluzioni che ho provato sono:

  • Un modulo per aggregato. Problema: se includo il tipo aggregato nel modulo, ottengo un nome di tipo aggregato inelegante (ad esempio MyAggregate.MyAggregate ), specialmente se riutilizzato nel codice non F # .NET.
  • Un file con tutti i tipi di contesto limitato in un particolare spazio dei nomi e un altro file contenente le funzioni all'interno di un modulo. Ancora non soddisfacente dato che in F # non posso dare lo stesso nome al modulo e al namespace, e le funzioni non sono realmente organizzate all'interno del file.

    // This gives a "namespace and module named ... both occur in 2 parts of this assembly" error
    
    //File1.fs
    
    namespace MyProject.Domain.MyBC
    
    type MyType = 
        // ...
    
    //File2.fs
    
    namespace MyProject.Domain
    
    module MyBC = //...
    

Sto ancora cercando una soluzione che soddisfi i seguenti

  • Organizzazione significativa del codice che riflette i concetti DDD, in modo che la ricerca del codice sia facile e ovvia
  • Un certo grado di compartimentalizzazione, per impedire l'accesso nativo ad altre parti del dominio non correlate ed evitare errori
  • Basso carico cognitivo per esplorare un file (ovvero non più di poche centinaia di righe di codice per file)
  • Utilizzo semplice e non forzato da codice esterno non F # .NET

Ho perso l'ovvio modo di farlo, o la mancanza di moduli parziali + collisione namespace / modulo li rende semplicemente uno scope scomodo per DDD?

    
posta guillaume31 17.11.2014 - 13:26
fonte

1 risposta

2

Dopo aver visto la sezione del video a cui fai riferimento, non vedo dove Scott dice che un Contesto Limitato dovrebbe corrispondere a un modulo. Ha appena scelto di scegliere un modulo per rappresentare il Contesto Limitato nel suo esempio . Non c'è assolutamente alcun motivo per cui un Contesto Limitato debba corrispondere a un modulo.

Se ritieni che il tuo Contesto Limitato non si adatti bene a un modulo, sei libero di dividerlo in qualsiasi modo tu voglia. Può disporre di tutti i moduli e tipi che vuoi, partizionati da namespace (s), assembly o quant'altro galleggia la tua barca. Tutto ciò che conta è che i principi di un Contesto Limitato che desideri siano raggiunti.

Per quanto riguarda le dimensioni del file e la navigazione, puoi provare Visualizzatore di strumenti elettrici di visualizzazione F # per la funzione.

    
risposta data 06.07.2015 - 11:12
fonte

Leggi altre domande sui tag