OOP設計のグッドプラクティスをどのようにして得ましたか?[閉まっている]


12

OOPデザインを作成するのが難しいことに気付きました。このプロパティがXクラスに正しく設定されているかどうかを判断するのに多くの時間を費やしました。

たとえば、これは数日ある投稿です:https : //codereview.stackexchange.com/questions/8041/how-to-improve-my-factory-design

私は自分のコードを確信していません。だから私は自分のデザインを改善したい、それを作成する時間を短縮したい

良いデザインの作成をどのように学びましたか?あなたが私を推薦することができるいくつかの本?


現在のレベルは?デザインパターンについて知っていると思いますか?
ACNB

実際のところ、PluralSightコースでそれらの一部を読み始めたわけではありません。pluralsight
Zon

1
ソフトウェア設計で最も影響力のある本の1つは、「設計パターン:再利用可能なオブジェクト指向ソフトウェアの要素」です。少し古くなっていますが、まだ読む価値があります。[ en.wikipedia.org/wiki/Software_design_pattern](wikipediaの記事)を読むこともできます。これらのソフトウェア設計パターンは、一般的な問題に対する優れたソリューションを提供するだけでなく、現在では専門用語の一部でもあります。
ACNB

1.書き込み-2.レビュー(文献やP.SEなどのサイトを含む)-3.リファクタリング
-4

経験に代わるものはありません、この種の知識への近道はありません

回答:


14

システムの設計は、実行することでしか得られないことの1つです。もちろん、良いデザインについて少し読むのに役立ちます-推奨される一般的なオブジェクト指向デザインブックは、Gang of Fourのデザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素です。異なるタイプのシステムおよび異なるドメイン内の設計パターンと原則に関する他の書籍もあります。

また、他の人を巻き込むのが最善です。設計を作成した後、重要なレビューのために、解決しようとしている問題と設計を他の人に提示します。彼らのフィードバックを聞いて、彼らと対話し、あなたがした決定をした理由に焦点を合わせます。ソリューションを実装するにつれて、設計に関する他の問題に気付くでしょう。これらをメモして、そこから学びます。また、他の人々と協力して、設計や要件に照らして実装をレビューし、自分がやったことを行った理由について批判的に議論することも良い考えかもしれません。

私は通常、他の人と顔を合わせて座るのが最善であると思いますが、ここでプログラマーについて特定の設計の質問をすることができます。コードレビュー実装に関する質問のためのStack Exchangeサイトもあります


4

あなたが尋ねたコードレビューの質問の外観から、あなたはそれをやり過ぎの段階にいます。良いデザインの重要性を発見する人々の間で、それはかなり一般的な問題だと思います。

それは実際、あなたが拾うどんなスキルでも自然で、おそらく必要なステップです。何かを学び始めると、スキルの知識が進歩し、それを応用すればするほど、結果が良くなり、マスタリングに向かってまっすぐ進んでいるように見えます。問題は、新しい目標が結果の質ではなく、スキルに関してどれだけの知識を蓄積するかということです。

スキルを真に習得するには、いつ使用するか、使用しないかを理解する必要があります。そのような理解を深めるには、おそらくそのスキルを使いすぎることが唯一の方法です。もちろん、あなたはこれについて読むことができますが、読むことは経験に代わるものではありません。

一つには、デザインパターンについて読むことは悪いスタートです。SOLIDGRASPなどのオブジェクト指向設計の原則について読むことをお勧めします。それらに慣れた後、一般的なデザインパターンの研究は良いアイデアです。なぜなら、これらの原則を具体的なイディオムの形成にどのように適用できるかがわかるからです。

言語の使用でパターンが出現すると、その言語には実際には機能が欠けていると主張されています。この声明は非常に急進的ですが、そこには多くの真実があります。したがって、他の言語を調べてみて、採用しようとしている概念をよりよく理解し、新しい概念について学ぶことをお勧めします。最終候補は、Squeak、Ruby、Lispです。
リストに関して、私の個人的な推奨事項は、コンピュータープログラムの構造と解釈であり、複雑な問題に対する堅牢なソリューションを、簡単に抽象化と(分解)トップダウン方式。

だからここに私が提案するものがあります:

  1. コードを書く(そして何が悪いのかを理解しようとする)
  2. コードを読む(そしてそれが何が良いのかを理解しようとする)
  3. 他の人と知識を交換します。あなたのアイデアを試してみてください。

これは素晴らしいアドバイスです!私はケビンと私の議論に見られるように、完全に私のデザインパターンの知識を適用する以上の時点で午前ここに
TheSilverBullet

3

他の人が言ったように、あなたは練習と経験でのみ良くなるでしょう。実際にあなたが取ることができるショートカットはそれほど多くありません。

あなたが自分のものを振り返り、自分が書いたものが気に入らないという事実は、私たちの職業の他の多くの人々と比べて、すでに先を行っています。あなたが自分自身を改善しようとしている間、私たちの残りは20のパラメータで500行の関数を書く人々と一緒に働きます。彼らはその混乱を機能させたからです。

ソフトウェア設計に関しては、白黒ではなく、どちらの設計が良いか悪いかです。どれだけ多くの経験を積んでも、古いコードに戻って、「これを書いたときに何を吸っていたのか?」と思うでしょう。重要なのは、物事を絶えず評価し、頻繁に思考演習を行って、良いコードを良くし、悪いコードを悪くするものを評価することです。

最後に、実践に取って代わるものは何もありませんが、他の人があなたが考えていないかもしれない異なる視点を指摘するので、ブログ/本/このサイトを常に読み続けることは常に良い考えです。

開始するには、これらの本をお勧めします。

  • C#のアジャイルの原則、パターン、および実践 -私はこの本を自分で3/4読みました。著者が指摘する主なポイントの1つであり、私もそれに100%同意します。適用する設計パターンを探して問題を解決することから始めないでください。代替物がそれよりも複雑になり始めた場合は、物事をできるだけシンプルに保ち、コードをパターンに進化させます。
  • ヘッドファーストデザインパターン -この本は読んでいませんが、IMOの多くのヘッドファーストシリーズは、特にこの分野の初心者を対象としています。だから彼らはよりシンプルな側面にいる傾向がありますが、私はその本について他の人から多くの良い反応を聞いたり読んだりしました

1
+1:「できる限りシンプルに保つ」...「コードをパターンに進化させる...」
ケビンクライン

1

アップフロントデザインはアウトバックデザインほど優れたものではありません。テスト、コーディング、リファクタリングするだけです。物事がいとき、それをきれいにする方法がわからないときは、いくつかのデザインパターンが役立つかどうかを確認します。これをしばらく練習すると、すぐに他の開発者がそのようなクリーンなデザインを思い付く方法を尋ねます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.