web-dev-qa-db-ja.com

「オブジェクト指向すぎる」

私は強力なOO=バックグラウンドを持っています。そして最近、コードはJavaで書かれていますが、優れたOOデザインは私が慣れているものよりも「抽象化が多すぎる」ことを紹介し、Javaの手続き型のスタイルである、いつものようにコーディングする必要があると言われました。

ここでもTDDはあまり実践されていませんが、テスト可能なコードが欲しいです。大規模な「ゴッドクラス」(このチームでは標準のようです)の静的プライベートメソッドにビジネスロジックを埋め込むことは、あまりテストできません。

自分の動機を同僚に明確に伝えるのに苦労しています。 OOおよびTDDを使用するとコードのメンテナンスがより簡単になることを同僚に納得させる方法について誰かアドバイスはありますか?

この質問 技術的負債については私の質問に関連しています。しかし、私は他の質問がカバーしている事実の後でそれを返済することとは対照的に、最初に借金を負うことを回避しようとしています

21
ThuneGrill

あなたはそれが保守不能であると不満を言ったのではなく、単にあなたの好みにではありません。それが意図的なスタイルの選択である場合、それはクリエイティブな違いが調整できない場合の可能性があるため、スタイルを調整して、好みのスタイルに合う場所を見つける必要があります。

人々は、モジュール式で、効率的で、抽象化された、比較的バグのないコードを、常に手続き型のスタイルで記述できます。 Javaは、そのようなショップにとっては奇妙な言語の選択ですが、たとえばAndroid向けに開発する必要があるなど、外部の要因が言語を決定した場合に起こることを私は見ることができます。

誰もが天才です。しかし、木に登る能力で魚を判断すると、それは愚かであると信じて生涯生きます。 - アルバート・アインシュタイン

それがだった意図的な選択である場合、それらがオブジェクト指向の優れた設計原則にどれだけ順守しているかによって実際に判断することはできません。それに応じてリファクタリングします。 Javaでは、クラスの外部にコードを記述できません。そのため、コードが存在するだけで、モジュールがオブジェクト指向であることを意図しているわけではありません。

一方、コードがどちらかパラダイムで混乱している場合は、おそらく損失を削減する必要があります。

32
Karl Bielefeldt

あなたの質問を読んで、私は本Pragmatic Programmerの1つのヒントを思い出しました。

そのヒントの1つはBe a Catalyst for Change

何をする必要があるか、どうやって行うかを正確に知っている状況にいるかもしれません。システム全体が目の前に表示されます。これは正しいことです。しかし、すべてに取り組む許可を求めてください。そうすれば、遅延や空白の視線に遭遇します。人々は委員会を作り、予算は承認を必要とし、事態は複雑になります。誰もが自分のリソースを守ります。これは「スタートアップ疲労」と呼ばれることもあります。

ストーンスープを作る時間です。あなたが合理的に求めることができるものを考え出します。うまく開発してください。それを手に入れたら、人々に見せて驚かせましょう。次に、「もちろん、追加した方がいいでしょう…」と言います。それは重要ではないふりをします。最初に必要な機能を追加するように求めるメッセージが表示されるのを待ちます。人々は継続的な成功に参加する方が簡単だと感じています。彼らに未来を垣間見せてください、そうすればあなたは彼らに集まってもらうでしょう。

ですから、OOとTDDの知識で良い仕事を始めたら、すぐに彼らがあなたの仕事について調べて尋ね始めるでしょう。

7
Rodrigo

新しい働き方を販売するには、明らかなメリットを示す必要があります。明確な利点はないが漠然とした抽象化の層をさらに記述しても、「将来に役立つ可能性がある」というのは機能しません。

複数のタイプのオブジェクトを作成する工場を作成します。依存性注入を使用すると、すぐにメリットがわかります。複数のクラスによって実際に実装される予定のインターフェースを作成します。

「真のオブジェクト指向」で私が頻繁に目にするのは、非常に複雑な方法で本当に単純な問題を解決するために高度な手法が使用されていることです。

同じオブジェクトを作成するだけの場合、ファクトリーの利点をどのように示すことができますか?高度な手法のメリットを享受し、そこから自分のポイントと作業を示すコード内の問題を見つけます。

戦争は一度に1つの戦いで勝利します。

3
Pieter B

小さなコードのチャンクを取得してTDDを実装し、より良いOOプラクティスを実行してメリットを実現することによってのみ、彼らを納得させることができます。ニースの投稿を表示するだけでなく、約束された土地に彼らを導いています。それのカード。

確かに、今日の多くのコードベースで使用されている抽象化を超えるケースがあると思います。必要なものだけを入れてください。抽象化も含まれます。

1
Jon Raynor