Flupは正しい方向に向かっています。「単一責任原則」はもともと手順に適用されていました。たとえば、デニスリッチーは、関数は1つのことを実行し、適切に実行する必要があると言います。それから、C ++では、Bjarne Stroustrupは、クラスが1つのことを実行し、それを適切に実行する必要があると言います。
経験則を除き、これら2つは正式には相互にほとんどまたはまったく関係がないことに注意してください。プログラミング言語で表現するのに便利なものだけに対応します。まあ、それは何かです。しかし、それはflupが推進しているものとはまったく異なる話です。
現代の(つまり、アジャイルおよびDDD)実装は、プログラミング言語が表現できるものよりも、ビジネスにとって重要なものに重点を置いています。驚くべきことは、プログラミング言語がまだ追いついていないことです。古いFORTRANに似た言語は、当時の主要な概念モデルに適合する責任を獲得します。カードリーダーを通過するときに各カードに適用されるプロセス、または(Cのように)各割り込みに伴う処理。その後、ADT言語が登場し、DDDの人々が後に重要なものとして再発明するものを捉えるまでに成熟しました(ただし、ジムネイバーズは1968年までにそのほとんどを把握し、公開し、使用していました)。 。(モジュールではありません。)
このステップは、振り子スイングよりも進化ではありませんでした。振り子がデータに揺れ動くと、FORTRAN固有のユースケースモデリングが失われました。主な焦点が画面上のデータまたは形状に関係している場合、それは問題ありません。PowerPointのようなプログラム、または少なくともその単純な操作のための優れたモデルです。
失われたのはシステムの責任です。DDDの要素は販売していません。そして、私たちはメソッドをうまくクラス化しません。システムの責任を売ります。あるレベルでは、単一の責任原則に基づいてシステムを設計する必要があります。
ですから、Rebecca Wirfs-Brockや私のようにクラスメソッドについて話していた人を見ると、ユースケースの観点から話していることになります。それが私たちの販売するものです。これらはシステム操作です。ユースケースには単一の責任が必要です。ユースケースはめったに建築単位ではありません。しかし、誰もがそのふりをしようとしていました。たとえば、SOAの人々を目撃してください。
これが、Trygve ReenskaugのDCIアーキテクチャに興奮している理由です。これは、上記のLean Architectureの本で説明されています。それは最終的に、「単一の責任」に対するand意的で神秘的な従順であったものにいくつかの真の身分を与えます-上記の議論のほとんどで見られるように。その特徴は、人間のメンタルモデルに関係しています。エンドユーザーが最初で、プログラマーが2番目です。それはビジネス上の懸念に関連しています。そして、ほとんど偶然に、それはflupが私たちに挑戦するときの変化をカプセル化します。
私たちが知っている単一責任の原則は、その起源の時代から残された恐竜または私たちが理解の代わりに使用する趣味の馬のいずれかです。優れたソフトウェアを実行するには、これらの趣味の馬をいくつか残す必要があります。そして、それは箱から出して考える必要があります。物事をシンプルで理解しやすくすることは、問題がシンプルで理解しやすい場合にのみ機能します。私はそれらの解決策にそれほど興味はありません。それらは典型的なものではなく、挑戦がどこにあるのかではありません。