1. ホーム
  2. language-agnostic

[解決済み] 抽象度はどれくらいがいいのか?

2023-06-11 03:46:43

質問

オブジェクト指向のプログラムでは どの程度の抽象化が多すぎるのでしょうか?どの程度がちょうど良いのでしょうか?

私は常にナットアンドボルトのような男でした。高レベルのカプセル化と抽象化の背後にある概念を理解していましたが、いつも直感的に、あまりに多くを追加するとプログラムを混乱させるだけだと感じていました。

私は常に、空のクラスやレイヤーを残さないような抽象化の量に挑戦していました。また、疑問がある場合は、階層に新しいレイヤーを追加する代わりに、既存のレイヤーに何かをはめ込もうとしました。

しかし、最近、私はより高度に抽象化されたシステムに遭遇しています。 階層構造の後半で表現を必要とする可能性のあるすべてのものが、最初に表現されるようなシステムです。これは、多くの空の層をもたらすので、最初は悪い設計のように思えます。しかし、よく考えてみると、空のレイヤーを残しておくことで、将来、リファクタリングなしでフックできる場所を増やすことができるのだとわかってきました。古いものを調整するための作業をほとんど行うことなく、古いものの上に新しい機能を追加する能力をより多く残すことができます。

この方法の2つのリスクは、必要なレイヤーを間違えてしまうことです。この場合、コードを拡張するためにかなりのリファクタリングが必要になり、使用されないレイヤーが大量に残ってしまうことになります。しかし、最初の抽象化を考え出すのにどれだけの時間を費やすか、それを失敗させる可能性、そしてそれを正しく行うことで後で節約できる時間によっては、試してみる価値があるかもしれません。

私が考えるもうひとつのリスクは、それをやりすぎて、すべての追加レイヤーを必要としなくなるリスクです。しかし、それは本当に悪いことなのでしょうか? 余分なレイヤーは本当に高価で、一度も使用されなかったとしても、それほど損失にはならないのでしょうか? レイヤーを作るのに必要な時間が失われることが最大の損失でしょう。しかし、その時間の多くは、より低レベルのコードではなく、抽象化されたコードで作業できるようになったときに、まだ節約できるかもしれません。

では、いつから過剰になったのでしょうか? どの時点で、空のレイヤーと余分な抽象化が過剰になるのでしょうか。どの程度少ないのでしょうか? スイートスポットはどこなのでしょうか。

これまでのキャリアの中で、必要な抽象化の量を判断するのに役立つ、信頼できる経験則はありますか?

どのように解決するのですか?

<ブロッククオート

では、どのような場合に過剰になるのでしょうか?どの時点で 空のレイヤーと余分な "必要かもしれない need"抽象化が過剰になるのはどの時点でしょうか? どの程度までが少なすぎるのでしょうか?どこが スイートスポットはどこですか?

これらの質問に対する明確な答えはないと思います。何が多すぎで何が少なすぎるか、その感覚を身につけるには経験が必要です。測定基準や品質管理ツールを使うことも有効かもしれませんが、一般化するのは難しいです。ほとんどの場合、個々のケースに依存します。

答えを求めているあなたを刺激するようなリンクがいくつかあります。

開発とは、あらゆるソフトウェア工学の取り組みに存在するさまざまな緊張感の間で正しいバランスを見つけることがすべてです。