C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[2]: 自作クラスからのフォームコントロール操作
(過去ログ 160 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 3 記事 (1 - 3 表示)] <<
0
>>
■92854
/ inTopicNo.1)
自作クラスからのフォームコントロール操作
▼
■
□投稿者/ amanda102
(1回)-(2019/11/02(Sat) 20:57:59)
分類:[.NET 全般]
C#でオブジェクト指向プログラミングを勉強中です。
自作クラスからメインフォームのコントロールを例のように操作したいのですが
他の質問系のサイトで↓のような回答がありました
"一般論としてコントロールをpublicメソッドに渡すような設計はあまり推奨できません。"
何が問題になるのでしょうか?
--
例@
Formに貼り付けているボタンをクリック、
自作クラスのメソッドが呼び出され値をFormにあるテキストボックスに代入
--
引用返信
編集キー/
編集
■92855
/ inTopicNo.2)
Re[1]: 自作クラスからのフォームコントロール操作
▲
▼
■
□投稿者/ Azulean
(1094回)-(2019/11/02(Sat) 23:07:07)
2019/11/02(Sat) 23:10:53 編集(投稿者)
■
No92854
(amanda102 さん) に返信
> "一般論としてコントロールをpublicメソッドに渡すような設計はあまり推奨できません。"
>
> 何が問題になるのでしょうか?
いろいろと切り口はありそうです。
・スレッドの考慮が忘れてしまいがち
・複数のクラスにコントロールのインスタンスを渡してしまっていると、コードの流れの把握が難しい、デバッグしづらくなる(誰がいつどこで書き換えたのか…?となる)
・誰がそのインスタンス(コントロール)を管理するのか曖昧になる
・寿命管理が弱くなる (フォームを閉じた後もそのクラスが生き残っているなど)
・クラスの責務が広くなる
・クラスの再利用性が下がる (少し設計を頑張れば、コントロールと癒着せずとも作れる→再利用性が上がるかも)
・コントロールに限らず、フィールド変数の多いクラスは理解する、修正するのが大変になりやすい
・コントロールに限らず、いろいろなクラスと密結合していると仕様変更に弱くなる
おそらく、下記のスレッドなのかと思いますが、この例であれば、「テキストボックス自体を渡さなくてもクラスは成り立つ」(責務を狭く・小さくできる)ということだと思います。
https://ja.stackoverflow.com/a/28646
> --
> 例@
> Formに貼り付けているボタンをクリック、
> 自作クラスのメソッドが呼び出され値をFormにあるテキストボックスに代入
> --
私もこの例の場合、テキストボックスをクラスに渡す…を第一候補とせずに考えますね。
1. クラスは文字列を生成するだけの責務にできないか?
2. 生成するタイミングが別だとしても、イベントで通知、コールバックで通知などの方式が良いと言うことはないか?
3. テキストボックスに代入するのはこのクラスに限定され、かつこのテキストボックスと同種のパターンがあるというように、部品化して問題なく、メリットがあるか?
(例:ファイル名を D&D を受け取るヘルパークラスなど)
引用返信
編集キー/
編集
■92860
/ inTopicNo.3)
Re[2]: 自作クラスからのフォームコントロール操作
▲
▼
■
□投稿者/ amanda102
(2回)-(2019/11/03(Sun) 12:56:02)
Azulean さん
>複数のクラスにコントロールのインスタンスを渡してしまっていると、
>コードの流れの把握が難しい、
Goto文を多用したスパゲッティコードのようになってしまうのですね
構造をよく考えないと、自分が作ったものでも
時間が経過した後で見返した時、解読できなくなってしまいますね
勉強になりました。
誠に有難うございました。
■
No92855
(Azulean さん) に返信
> 2019/11/02(Sat) 23:10:53 編集(投稿者)
>
> ■
No92854
(amanda102 さん) に返信
>>"一般論としてコントロールをpublicメソッドに渡すような設計はあまり推奨できません。"
>>
>>何が問題になるのでしょうか?
>
> いろいろと切り口はありそうです。
>
> ・スレッドの考慮が忘れてしまいがち
> ・複数のクラスにコントロールのインスタンスを渡してしまっていると、コードの流れの把握が難しい、デバッグしづらくなる(誰がいつどこで書き換えたのか…?となる)
> ・誰がそのインスタンス(コントロール)を管理するのか曖昧になる
> ・寿命管理が弱くなる (フォームを閉じた後もそのクラスが生き残っているなど)
> ・クラスの責務が広くなる
> ・クラスの再利用性が下がる (少し設計を頑張れば、コントロールと癒着せずとも作れる→再利用性が上がるかも)
> ・コントロールに限らず、フィールド変数の多いクラスは理解する、修正するのが大変になりやすい
> ・コントロールに限らず、いろいろなクラスと密結合していると仕様変更に弱くなる
>
>
> おそらく、下記のスレッドなのかと思いますが、この例であれば、「テキストボックス自体を渡さなくてもクラスは成り立つ」(責務を狭く・小さくできる)ということだと思います。
>
https://ja.stackoverflow.com/a/28646
>
>
>>--
>>例@
>>Formに貼り付けているボタンをクリック、
>>自作クラスのメソッドが呼び出され値をFormにあるテキストボックスに代入
>>--
>
> 私もこの例の場合、テキストボックスをクラスに渡す…を第一候補とせずに考えますね。
>
> 1. クラスは文字列を生成するだけの責務にできないか?
> 2. 生成するタイミングが別だとしても、イベントで通知、コールバックで通知などの方式が良いと言うことはないか?
> 3. テキストボックスに代入するのはこのクラスに限定され、かつこのテキストボックスと同種のパターンがあるというように、部品化して問題なく、メリットがあるか?
> (例:ファイル名を D&D を受け取るヘルパークラスなど)
>
解決済み
引用返信
編集キー/
編集
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-