これは重複している可能性がありますが、私はうまくいけないことを見たことがないのでそうではありません。基本的には、コードの断片を別々のメソッドとオブジェクトに分割するときの経験則を見たことはありません。誰かが良いルールを持っていますか?メソッドとオブジェクトを使用する場合
答えて
私は、クラスの境界と階層を設計するためにthis article(butunclebob.com、S.O.L.I.D. OOPの原則)が啓発されていることを発見しました。ほとんどの常識ではありますが、達成したい目標に名前を付けることは、経験を通してデザインの「良い」性格を感じるまで役立ちます。
このルールは、次のようになります。
Q:これをメソッドとオブジェクトに分割する必要がありますか?
A:はい。
間違いなく、もう少し期待していました:P –
完全に正しい!あなたが尋ねなければならないならば、答えははいです。 –
オブジェクト指向の観点からは、すべてのコードをオブジェクトとメソッドとして記述する必要があります。 OOPの通貨はオブジェクトです。あなたが大規模なクラスを持っていて、それが単一の責任に違反するためそれを分解する方法が不思議であれば、経験則は変化するものをカプセル化することです。
方法がページに収まらない場合は、大きすぎます。 :-)
は本当に小さなフォントを使用するには言い訳ではありませんか、本当に大きなモニタを使用
行くと読んで、
- Refactroring:http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672/
- レガシーコードでの作業:あなたがそれらを読んで、彼らから学ぶ場合、彼らはあなたがすでに持っているものに対処する方法について話がhttp://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/
、あなたはしないように狙えます始めるにはラガシーコードを作成してください!
免責事項:私はOOPに対しては何も持っておらず、まったく反対です。以下は単なる個人的な意見です
一般的に私は他の回答に同意し、必要と感じるたびにコードをメソッドに分解しようとします。
しかし、OOPはメソッドであり、呼び出す場合はツールです。 OOP技法を採用することは非常に強力ですが、他のアプローチがうまく適合する状況がまだあります。
シンプル
echo "Hello World!"
が速いかもしれない/より良い/
class HelloWorld {
private String text = null;
public HelloWorld() {
this.text = "Hello World";
}
public void print() {
echo this.text;
}
}
よりも簡単に(誇張された例hello world in patternの比較)
クラスは、1つのプライマリ目的を持つように設計されなければなりません。つまりクラスを単純明瞭に保つ。
メソッドを決めるときは、2つのことを念頭に置いてください。クラスのための明確なインターフェイスに焦点を当て、テスト可能なメソッドを作成します。
- 1. getXメソッドを使用する場合
- 2. _changed?メソッドcounter_cacheを使用する場合
- 3. BlackberryのManagerクラスにsubpaint()とsuper.paint()メソッドを使用する場合
- 4. データ転送オブジェクトとデータセットを使用する場合
- 5. SoapオブジェクトとSoapPrimitiveを使用する場合
- 6. PHP:パラメータがある場合とない場合があるメソッドを使用する
- 7. 目的Cコンベンション:使用する場合と使用する場合
- 8. IModelBinderとDefaultModelBinderを使用する場合
- 9. SemanticModel.GetSymbolInfoとSemanticModel.GetDeclaredSymbolを使用する場合
- 10. TaskEx.RunとTaskEx.RunExを使用する場合
- 11. HashtableとHashMapを使用する場合
- 12. HtmlControlsとWebControlsを使用する場合
- 13. JPA - オブジェクトを永続化するときにgetTransaction()を使用する場合
- 14. データアクセス用にMicrosoftアプリケーションブロックを使用する場合、DataReader.Close()メソッドは接続オブジェクトを閉じますか?
- 15. ARCでオブジェクト参照に__blockキーワードを使用する場合
- 16. KeyValuePair <>をプロパティとして使用する場合と別クラスを使用する場合
- 17. デフォルトを使用する場合とモデルのコンストラクタを初期化する場合
- 18. QWebViewメモリ使用私は複数のQWebViewオブジェクトを使用する場合
- 19. 動的にリストアアダプタを使用する場合と比較する場合
- 20. Railty - 使用する場合
- 21. CoreAnimationを使用しない場合と使用しない場合
- 22. ASP.NET MVC 2 - テンプレートを使用する場合と部分的なビューを使用する場合
- 23. MySQLの設定:ハイフンを使用する場合とアンダースコアを使用する場合
- 24. SFSBで@Asynchronousメソッドを使用した場合
- 25. ハスケルでハムズを使用する場合Yesodなしの場合
- 26. コレクションをフィルタリングするためにLINQtoObjects上でlambdaを使用する拡張メソッドを使用する場合
- 27. AJAXを使用する場合とWebアプリケーションでAJAXを使用しない場合
- 28. validate()メソッドを使用してsubmitイベントでフォーム要素を検証する場合
- 29. rails 3未定義のメソッド `_index_path 'をform_forを使用する場合
- 30. オブジェクトが有効な場合、TryValidateObjectを使用したStackOverflow
これは私が探していたものです。行くべきガイドラインの簡単なセット。ありがとう! –