例として、Javaでアプリを書いているとしましょう。
アプリは、Pythonで記述されたAPIサーバーと通信します。
PythonサーバーはSQLデータベースと通信します。
JavaScriptで記述されたアプリのWebサイトもあります。
4つの異なる言語を使用すると、本質的に同じデータ構造を4回異なるものにするのは簡単です。
たとえば、User
型は次のようになります(擬似コード):
type User {
integer id;
string name;
timestamp birthday;
}
プロジェクトのすべての部分には何らかの表現が必要でしょうUser
。JavaパーツとPythonパーツには、2つの異なるclass
宣言が必要です。データベースにはUser
テーブル宣言が必要です。そして、フロントエンドサイトUser
も代表する必要があります。
このタイプを4回繰り返すことは、「繰り返しはしない」という原則に反します。また、User
タイプが変更された場合、プロジェクトのさまざまな部分でこれらの変更を繰り返す必要があるという問題があります。
Googleのprotobufライブラリは、特殊な構文を使用してデータ構造を記述し、ライブラリが複数の異なるプログラミング言語で構造宣言を生成するというこの問題に対する一種のソリューションを提供することを知っています。しかし、これでも型の検証ロジックを繰り返さなければならないという問題には対応していません。
これに関する本やブログの投稿への提案やリンクはありますか?
Repeating this type 4 different times really breaks the Don't-Repeat-Yourself principle
。ありません。異なることを行う4つの異なるシステムがあります。乾燥しすぎています。私の経験では、やりたいと思う再利用性は悪の種です。なぜなら、密結合を導入するからです。それUser
は、4つの異なる言語で4回繰り返したよりもさらに悪いことです。分散環境では、カップリングが問題です。DRYではありません。