私は、クラスを作成する理由と「あなたの要件の名詞を探してください」というようなことについて、すべての本を読んだが、十分ではないようだ。私のクラスは私にとっては厄介なようです。私はクラスを比較してうまく設計されているかどうかを知るために何らかのメトリクスがあるかどうかを知りたいと思います。そうでなければ、私は適切なクラスのデザインのヒントを得ることができる最も尊敬OOの教祖ですか?適切なクラスを設計する
答えて
データベース設計、正規化の具体的な概念に精通している場合は、その答えは簡単です:それは役に立たない場合は、データ中心のクラスでは、第3正規形で
をエンティティを表す必要があり、これを試してみてください代わりに:
- クラスは、データ要素の集合であり、それはあなたのモデルに一つのことを表している必要があります。すなわち、クラス
- それらを操作する方法は、特異な責任を持つべきです。それが複数のものを表すなら、それは複数のクラスでなければなりません。
- クラス内のすべてのデータ要素は、論理的に互いに関連付けられている必要があります。そうでない場合は、二つ以上のクラス
- に分割クラスのメソッドのすべてが彼らの入力パラメータとクラスのデータ要素に対してのみ動作しなければならない - に関する限りだLaw of Demeter
を見ます私は一般的な抽象的なアドバイス(長いエッセイを書くことなく)で行くことができます。特定のアドバイスが必要な場合は、批評のためにクラスの1つを投稿することができます。
@ [Celebrus]:最初に良いクラスをデザインする方法がわからない場合は –
私はオブジェクトデザインが科学と同じくらい芸術だと思います。クリーン&エレガントなクラスを設計する方法を理解するには時間と実践が必要です。おそらく、単純なクラスの例を挙げることができれば、SOユーザーが満足できないように設計しているので、ポインタを批評して指摘することができます。私はあなたが既にテキストで読んだことの外に一般的な答えがあるかどうかはわかりません。
も知りたいですか?どの言語を使用していますか? OODは言語に依存しませんが、クラス内の言語固有の機能を使用すると、より洗練されたものになります。 – Jason
私が個人的に知っている最も尊敬されたOO教祖はStackOverflowです。ここにあなたのクラス名を入れて、私はあなたが良い数のレビューを得ると思う。
良いまたは不敬ですか? – orbfish
クラスは通常、問題のドメインの概念をモデル化するために使用されます。明確に定義された問題(ユースケースとも呼ばれます)を取得すると、すべての参加者を識別できます。参加者の一部は、設計しているシステム固有のものになります。あなたのシステムとして一つの大きな黒いボックスから始めましょう。あなたがより多くの情報を持っているときにそれを分解してください。問題のドメインの概念に分解できないレベルがある場合は、クラスを取得し始めます。
しかし、これは非学者の主観的な見解です。私はメニューに塩のピンチをお勧めします。
あなたがリファクタリングしたときに、きれいになってから汚れてしまうクラスを作成することは、OOの中核部分です。多くのデベロッパーは、完璧なクラスデザインに飛び込もうとしています。私の経験では、それは不可能です。代わりに、あなたは遭遇して問題を解決し、その後リファクタリングします。デザインが出現すると、クラスやインターフェイスをベースにして収穫することができます。
ありがとうございます。クラスをリファクタリングしてより良いものにする方法もわからない可能性があります。;-) –
それは本当ですが、彼の意見も真実で、どこかで逃しました。 – orbfish
メトリック?そうではありません、あなたはそれらを信頼するでしょう。
クラスは、プログラムを動作させ、複数のリビジョンでメンテナンスできるようにしていますか?
「はい」の場合はOKです。
いいえの場合は、自分に尋ねて、どういうわけではないのかを尋ねてください。
構造体の代わりに動作に注目してください。オブジェクトは、行動と責任を持つ「生きている」エンティティです。あなたは物事をするように彼らに言う。このようにモデル化するのに役立つCRCカードのアプローチを見てください。
- 1. 適切Hibernateのレイヤ設計
- 2. スパースユーザープロファイル用の適切なデータベース設計
- 3. クラスをダウンロードする適切な方法
- 4. ファクトリメソッドの設計パターンに異なるパラメータを追加して、適切な設計を実現する方法
- 5. Typescriptでテスト可能な関数をエクスポートするための適切なクラス設計は何ですか?
- 6. 計算の適切な最適化
- 7. ActiveRecordクラスの適切なパターン
- 8. サービスを使用した適切な設計
- 9. Redisのデータベース設計 - 適切なデータ型を決定し、セカンダリインデックスに
- 10. IoCコンテナを使用してServiceクラスのServiceConfigを解決する適切な設計
- 11. Symfony2 Doctrine2フィルタとルールのための適切なエンティティの設計
- 12. 静的クラス間でデータベース接続を共有するための適切な設計?
- 13. 適切なナビゲーションタブの設定
- 14. iphone opengl適切な設定
- 15. 適切なモデルの設定
- 16. Java genericsを使用してコンバータSPIを設計する適切な方法
- 17. @Componentクラスを適切に設定する方法
- 18. OOP:この状況では、どのようなクラス設計が適切なはずですか?
- 19. ユニットテスト可能なクラスを設計する
- 20. 適切な除数の合計N
- 21. クラス図を設計する
- 22. データベースコンテキストクラスの適切な設定ですか?
- 23. XMLHTTPRequest CORSの適切なヘッダーを設定
- 24. クラス内のシーケンスプロトコルの適切な実装
- 25. AutokeyでのPythonクラスの適切なインポート
- 26. JavaScriptの適切なクラス構成
- 27. ブルームフィルタで適切なビット数を計算する
- 28. bxsliderが不適切なビューポートサイズを計算するとき
- 29. 適切なgoogleマップを計算する方法
- 30. Google Maps Directions API不適切なルートを計算する
+1また、 – krebstar