2017-04-07 10 views
7

私はC#で関数型プログラミングの原則を適用することによって実装されるシステムの設計をキャプチャするように求められました。これのための要件は、非公式の英語ではなく、デザインを記述するためにあらゆる種類の形式を使用することです。また、UMLの使用は禁止されています。機能的なパラダイムデザイン

私はこれらの目的のためにF#を使用しようとしましたが、F#を使用してすべてのものを再実装することなく抽象レベルを高く保つのが難しいです。

だから私はいくつかの質問を持っている:

  1. は、機能的なデザインを記述するためにどのように任意のアーキテクチャフレームワーク/練習ありますか?

  2. 実装の詳細がないメソッドを公開するにはどうすればよいですか?

  3. F#でコンポーネントインターフェイスを作成するにはどうすればよいですか?

  4. OOでは、通常、アーキテクチャ(たとえば4 + 1など)のビューが異なります。機能的なデザインのようなものはありますか? 1については

答えて

0

:私はを認識していないことが、私は、開発者

2については

のアーキテクチャの一種ではない午前:以下は、私が使用技術などたくさんあります。

let memoize (f : 'K -> 'V) : 'K -> 'V = 
    let dict = Dictionary<'K, 'V>() 
    fun k -> 
    match dict.TryGetValue k with 
    | true , v -> v 
    | false, _ -> 
     let v = f k 
     dict.[k] <- v 
     v 

3の場合:コンポーネントインターフェイスとはどういう意味ですか?

4:4 + 1は、機能的な言語で有効である必要があります。また、言語に依存しないようです。

一般に、高次関数、データと動作の分離に重点を置く機能設計は、変更可能性よりもむしろ不変性を優先し、副作用を「上向き」(IO Monadがこれの一例です)しています。

1

TLDRそれはすべて組成についてです。

HKTを使用する必要があるすべてのもの(Generic Genericsと考えてください)は、ライブラリ設計にとって大部分の資産です。純粋な関数型プログラミングの場合、GO4の考え方や新しい流行語エンタープライズプログラミングのための週の。

ハスケルを学び、モナド、ファンクター、応用、モノイドなどについて学んでください。(それを今までに9000回以上使ったことはありません)フリーモナドのようなものを見て、ボイラープレート、レンズ、Typeclasses、MTLスタイルのトランスフォーマーなどがあります。その後、より優れたライブラリプログラマーになれます。