コンストラクタの引数が長くなりすぎます、コンストラクタの引数を長くしない方法はありますか?
プロパティにsetを追加して外部クラスから代入するのも考えましたが、あまりよく思えません。
C#
1class TestConstructor 2 { 3 public string methodName { get; } 4 public string imageName { get; } 5 public double imageSerchThreshold { get; } 6 public int X_Adjust { get; } 7 public int Y_Adjust { get; } 8 public int threadSleepTime { get; } 9 public AdbComannd.Scene scene; 10 public double sceneVerificationThreshold { get; } 11 public int sceneVerficationMaxCount { get; } 12 13 public TestConstructor(string methodName,string imageName,double imageSerchThreshold, int X_Adjust,int Y_Adjust ,int threadSleepTime,AdbComannd.Scene scene,double sceneVerificationThreshold,int sceneVerficationMaxCount) 14 { 15 this.methodName = methodName; 16 this.imageName = imageName; 17 this.imageSerchThreshold = imageSerchThreshold; 18 this.X_Adjust = X_Adjust; 19 this.Y_Adjust = Y_Adjust; 20 this.threadSleepTime = threadSleepTime; 21 this.scene = scene; 22 this.sceneVerificationThreshold = sceneVerificationThreshold; 23 this.sceneVerficationMaxCount = sceneVerficationMaxCount; 24 } 25 } 26void TestMethod() 27 { 28 TestConstructor testConstructor = new TestConstructor("A_Serch", "A.png", 0.6, 0, 0, 3000,AdbComannd.Scene.Warning,0.6,3); 29 TestConstructor testConstructor2 = new TestConstructor("B_Serch", "B.png", 0.6, 0, 0, 3000, AdbComannd.Scene.Warning, 0.6, 3); 30 }
「関数の引数を減らす方法」でしたら言語関係なく調べれば幾らでもでてくるのでは?
得てしてそもそもの設計が悪いものです。
どのあたりが悪い設計でしょうか?初心者ですので教えていただけると嬉しいです
コンストラクタの定義が長いと言っているのか、インスタンス化の記述が長いと言っているのか、どちらですか?
インスタンス化の記述です、普通のライブラリを使用しているときにはここまで引数は長く指定することはないので自分の書き方がおかしいのかなと思いました。
「"A_Serch", "A.png", 0.6, 0, 0, 3000,AdbComannd.Scene.Warning,0.6,3」
が長いと言っているのですよね?
短くしたいのであればこの情報を減らせば良いのでは?
というより「クラス設計きちんとしてないから引数が多くなって混乱する」というところですね。
もしくはもっと基本設計、詳細設計をきちんとやったほうがいいかもしれません。
「製造しながら考える」と設計があってないようなものになります。
「"A_Serch", "A.png", 0.6, 0, 0, 3000,AdbComannd.Scene.Warning,0.6,3」
「"B_Serch", "A.png", 0.3, 30, 0, 3000,AdbComannd.Scene.Warning,0.5,5」
画像処理に使うしきい値や、上限値等の減らせない情報が多くオーバーロードできずに困っています
配列に詰め込んだら送受ともに1つになるんでは。
受け側で必要な内容チェックする必要はありますけど、トータルとしては軽くなるかと
「渡す情報は変わらないけど、渡す情報を減らしたい」
ではないんですよね?
「渡す情報は変わらないけど、コンストラクタの記述を短くしたい」
ですか?
コンストラクタは引数無しで、各プロパティにSetをつけるのもだめなんですよね?
(これでも記述は長くなりますよね?)
クラスに渡す情報量が変わらず、情報による違いを共通化出来ないなら、コーディング量は減らないと思うのですがどうでしょうか。
コーディング量は増えても、コンストラクタの記述が短くなれば良い、というわけでもないでしょうし。
少なくとも画像に関する情報とシーンに関する情報の二種類あります。二つに分けるべきクラスが一つにまとめられてしまっている気がします。
結局のところ何を実現したくて組んだコードか提示されないことにはZuishinさんがコメントされているように「気がする」にとどまり、回答も「なんとなく」ふわっとしたものになるので、的確なアドバイスにはならないですよ。
自身で初心者と仰る人のコードだけで要件まで把握するのは他者には困難です。
回答4件
あなたの回答
tips
プレビュー