6

モデル駆動型 SW 開発 (MDSD) に関する (ドイツ語の) Wiki 記事を読んでいるだけです。ウィキ定義の要約:

  • MDSD は DRY 原則に関するものです (繰り返さないでください)
  • MDSD は、DSL (ドメイン固有言語) とジェネレーターの設計に関するものです。
  • MDSD を使用すると、(それぞれの DSL をより高いレベルで抽象化することにより) 問題をより簡潔に説明できます。

私は高階関数型プログラミングを知っていて使用しているので、私の実際の質問は次のとおりです。MDSD は、高階関数型プログラミングが提供する強力な機能 (の一部) を、本質的に欠けているプログラミング言語/パラダイムに注入しようとする絶望的な試みにすぎないのでしょうか?それらの機能は?

(または、私は誤解していましたか? MDSD を使用して高階関数型プログラミングを実質的にサポートすることさえできたのでしょうか?)

4

2 に答える 2

5

私はそれを逆に見ることを好みます。OOP、MDSD、TDD、ドメイン駆動設計、およびそこにある他の多くのパラダイムはまさにそのパラダイムです。それらは、人々が開発したソフトウェア開発のタスクを見て、彼らの前にあるものに欠けていると感じたものに対処する方法です. 関数型プログラミングも同じことを行っていることがわかりました。関数型プログラミングは、第一級関数を持たない言語では洗練されていない抽象化の力をプログラマーに与えます。したがって、MDSD が非関数型言語に関数型の機能を与えようとする必死の試みであるとは言えませんが、人々が同じ問題を別の視点から見ているとは言えません。

この最近の SOの質問に対する回答のいくつかは、別の言い方をしています。ShreevatsaR は、「マクロでできることはほとんどすべて、高階関数でできる」と言っています。Matthias Benkard は次のように述べています。他のコメントも同じテーマを反映しています。MDSD の信条の 1 つはジェネレーターだとおっしゃいました。マクロはコンパイル時のジェネレーターです。したがって、関数型言語では MDSD が本質的に簡単であるという議論として、彼らのステートメントを翻訳します。

于 2011-05-05T13:30:58.460 に答える
3

DSL (ドメイン固有言語) (FP) を作成することと、一連のドメイン オブジェクト(OOP) (オブジェクト内にビジネス ロジックを含む) を作成することには大きな違いがあります。

FP は、手続き型言語と同じ問題 (および利点) を被る可能性があります:動作とデータの分離。OOP 言語はこれを思いとどまらせます。この分離は貧血ドメイン モデルとして知られています。

この「分離」により、データの変更が非常に困難になる可能性があります (DSL ではさらに悪化する可能性があります)。私の投稿を参照してください:関数型プログラミングにおけるインクリメンタル データ モデリングの変更の処理

ただし、反対に動作を変更し、全体的にステートレスなものを使用することは、OOP ドメイン駆動設計では苦痛です。しかし、AOP ITDメタプログラミングのようなものでは、これはあまり問題になりません。

Scala と Ruby は、両方の手法を組み合わせた良い例です。

于 2011-05-05T13:44:18.767 に答える