C#でIf文、Switch文、foreach文、LINQを多用しているクラスがあるのですが、可能ならもう少しコンパクトにしてパフォーマンスを上げたいと考えています。
###前提・実現したいこと
まず、ウェブ上で20個のラジオボタンを設定して、それより大きく分けて4種類のオブジェクトに分けています。
それぞれのオブジェクトで概ね500行程度のロジックを組んでいるのですが、自分が見ても長すぎると考えています。
重複したロジックをまとめて、すっきりさせたいです。
###発生している問題
冗長的なロジックによる見栄えの悪さ
###該当のソースコード
実際のコードの二つのケースを簡略化して、掲載しています。
1000文字超えてしまったので、外部にアップロードしました。
お手数ですが、以下をご覧いただければと思います。
プログラムソース
###試したこと
同じような関数をまとめようと思いましたが、LINQでの記述が各パターンごとに少しづつ違うため、うまくまとめれませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
C#
ASP.NET MVC
VisualStudio2013
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ご参考までに、、、
C# のコーディング規則
1:上記にもありますように、型が分かる場合はvarを使うとすっきりして可読性も上がると思います。
2:TARGET_AとTARGET_Bをセットしている部分は、IEnumerable<AAA>を返すメソッドを用意すれば、1行でそれぞれコーディングできるのではないでしょうか。
ex) TARGET_A = GetDbData(ABCD_SET, "A").ToList(); TARGET_B = GetDbData(ABCD_SET, "B").FirstOrDefault();
他にも、AAAクラスの中は、KeyId, Id, No, Type, Nameのみで考えたいですね。
上記は部分的なところではありますが、何かの足掛かりにでもなれば幸いです。
投稿2016/07/07 00:36
編集2016/07/07 01:47総合スコア163
0
C#
1public string A_id { get; set; } 2public string A_no { get; set; } 3public string A_type { get; set; } 4public string A_name { get; set; } 5public string B_id { get; set; } 6...
と
X_(属性名)
という記述が繰り返されますが、
id,no,type,nameを持つクラスを作り、
...と思ったら既にある(DB_LIST)のでそれを使って
C#
1public partial class AAA{ //なぜpartialなのか 2 public string Key { get; set; } 3 public DB_LISt A { get; set; } 4 public DB_LISt B { get; set; } 5 public DB_LISt C { get; set; } 6 public DB_LISt D { get; set; } 7}
というふうに書けばいいんじゃないかと思いました。
が、
その後を見ると、
Aだけセットされたタイプ
Cだけセットされたタイプ
A,Bがセットされたタイプ
...
など
いろいろな種類を1つの"AAA"型に無理やり突っ込んでいる感じがするので
データ構造を根本的に整理しなおしたほうがいいと思います。
オブジェクト指向だ手続き型だと気にしているようですが、
手続き型としても読みづらいです。
投稿2016/07/06 07:10
編集2016/07/07 03:58総合スコア13528
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/07 04:56 編集
0
ベストアンサー
情報の追加の依頼で書こうと思いましたが、オブジェクト指向プログラミングの話になるのでいったん回答で書きます。
ソースコードを一瞬見ました。重複したロジックがあるので、いくつか関数をまとめるとスッキリしたコードになると思います。ただ、オブジェクト指向となると、掲載されたソースコードでは問題があります。
というのも、オブジェクト指向では「Aであるaをbでcする」という書き方で、意味のあるクラス名・メソッド名・変数名をつけることで、データやロジックに名前を付けて管理するのがすごく大きな利点です。つまり、何のためのなんのコードだかわからないのでは、オブジェクト指向にやりようがありません。
また、パフォーマンスについてですが、一見して特別重くなる部分はなさそうですがどこが問題になっていますか?一休さんのトラ退治の話では、絵に描いトラは捕まえようがないという話ですが、遅くなっていないコードもまた速くしようがありません。これに関しては、実行できるコードが必要です。
投稿2016/07/06 06:27
総合スコア2883
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/06 06:45
2016/07/06 07:11
2016/07/06 08:08
2016/07/06 11:01
2016/07/07 03:30
2016/07/08 08:22
0
C#は、あまり分かりませんが、ぱっと見て一番問題だと思ったのは、コメントがないことです。
それともこれは、テラテイル用に意図的なものですか。
あとこれは、設計より記述の問題ではないですかと思いますが。
なので、そういうのは、ツールで測って見るといいんじゃないかと思いました。
SourceMonitorというのがあるようですよ
メトリクス計測 SourceMonitor 紹介
投稿2016/07/06 06:13
総合スコア2208
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/07 04:38 編集