- ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
570 :デフォルトの名無しさん[sage]:2015/05/31(日) 00:55:02.32 ID:QGRYrQik - 参照型プロパティの初期化について質問です。
■実装方針 1.プロパティのnewは1度きりで、インスタンスは引き継ぐ。 (初期化しても引き継ぎたい値のコピーやnew処理コスト、コード量増加抑止を目的) 2.プロパティのInitializeは毎回実行。 3.Initializeの引数はクラス毎に異なる。 ■実装例 http://ideone.com/nQJ6VZ ■質問内容 1.Initialize内部では例外が無い前提で実装するのは、多人数開発においてアリか。 2.Initializeの成否でなく、thisを戻り値にする設計は、多人数開発においてアリか。 3.「m1 =(m1 ?? new M1()).Initialize」の部分が定形的なので、もっと省略したり単純化する方法はあるか。 4.実装方針に問題点はあるか? 以上、部分的にでもご意見いただければと思います。
| - ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
578 :570[sage]:2015/05/31(日) 13:31:30.99 ID:QGRYrQik - 皆さん、ご意見ご指摘ありがとうございます。
後出しになってすみませんが、まず質問時の補足をさせていただきます。 ■状況 現在WPFを勉強中です。 もともと初期化を以下のイメージで実装していました。 これでは、インスタンスの作成とモデル毎に異なる初期化の判別が冗長だと感じたのが今回の質問のきっかけです。 m1 = m1 ?? new M1(); m1.Initialize(hoge,"foo"); m2 = m2 ?? new M2(); m3 = m3 ?? new M3(); if (m3.IsInitialize) { m3.Reset(dst); } else { m3.Initialize(dst); } ■考え方 質問時のコードは、次の考え方を含んでいました。 ・コンストラクタでの初期化が適当でないモデルを想定。(継承、シリアル化、バインディング、非同期、他) ・初期化⊃リセットと考え、Initializeにリセットの意味合いを持たせる。 ・処理の抽象化とコード量を短縮することを目的に、Initializeをメソッドチェーンにする。 ・初期化(リセット)が失敗した場合、エラー度合(処理を進めるのか終了するのか)は、タイミングや他モデルの状態に依存し、 初期化時に例外スローはせずにプロパティ参照時にエラー度合をチェックすべき。 続きます。
| - ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
579 :デフォルトの名無しさん[sage]:2015/05/31(日) 13:34:53.01 ID:QGRYrQik - >>578の続きです。
今回私の考え方に誤りがあることが分かり、勉強になりました。 ■反省 ご指摘を受けて、次の是正が必要だと認識しました。 ・コンストラクタでの初期化が適当でないものだけ、Initializeを作成する。 ・初期化とリセットを混同せず、別々に定義する。 ・初期化でのメソッドチェーンはやめる。 ・初期化失敗時に例外を投げて問題ない、エラー度合を判断できるクラス設計にすべき。 ■お願い 反省点を認識したものの、具体的な実装が浮かびません。 上記コードのようなさまざまな参照型プロパティの初期化が必要な場合、どう効率的に実装するかご提示いただけないでしょうか? Initializeを作らないというアプローチでもかまいません。 抽象的なお願いとなりますが、ご助力ください。
|
|