- - PR -
分岐が多数ある機能の実装方法
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-18 10:50
こんにちは。リミットと申します。
C#2.0を使って開発しております。 実装しようとしている機能は設定値(DBの値)を見て 分岐処理を行い、また次の設定値を見て分岐処理を行う というのを繰り返し行わなければなりません。 単純にif文とswich文を羅列して実装することも可能かと 思いますがそれではメンテナンス性、ソースの可視化、 オブジェクト指向の面から好ましくない実装になってしまう のではと思ってしまいます。 このように分岐が多数ある機能の実装はどのようにすれば スマートにいくのでしょうか? 意見をお持ちの方、是非参考にさせて下さい。 宜しく御願い致します。 | ||||||||
|
投稿日時: 2007-06-18 11:19
(1)DBから取得した設定値を元に分岐する (2)それはいくつかある とだけ読み取りました。 (a)設定値とは何だろう? (b)for文は使えなさそうな状況なのだろうか? (c)繰り返しの数はいくつくらいなのか?今後も増えそうなのか? といった疑問点も同時に沸きました。 もう少し前提条件やその処理の目的などを明確化しないと 回答しづらいと思います。 | ||||||||
|
投稿日時: 2007-06-18 11:25
Main 1 - * IProcess
IProcessは条件と処理を持つ。 拡張処理は継承して作成したり。 後で分岐や処理が増えてもクラスを追加して 定義ファイルに書き込むだけで対応できるようにするとか。 のようにやるとかっこいいですね。 でも、各処理をサブルーチン化して 分岐から呼び出すだけでもメンテナンス性は高まると思います。 1ファイルに全部書くとメンテナンス性は下がりますので 静的な処理クラスを用意するといいでしょう。 | ||||||||
|
投稿日時: 2007-06-18 11:49
よねKENさん、早速のレスポンス有難う御座います。
前提条件やその処理の目的をお伝えするのは難しいので 例を書かせて頂きます。 1.Aという値があります。 2.設定値aを見て、AをBに変換する。 (設定値aがtureかfalseを判断して、trueの場合はA + 3、 falseの場合はA - 3する等の処理を行う) 3.設定値bを見て、BをCに変換する。 4.設定値cを見て、CをDに変換する。 ・ ・ ・ という、設定値を見て変換するという処理が多数あります。 > (1)DBから取得した設定値を元に分岐する 具体的にいうとDBからだけではありませんが、設定値の取得方法 は考慮して頂かなくても結構です。 > (2)それはいくつかある はい、多数あります。 > (a)設定値とは何だろう? 文字列の場合もあれば数値の場合もあります。 > (b)for文は使えなさそうな状況なのだろうか? 設定値をひとつひとつ判断していかなくてはいけないので、ループ 処理は使えそうにありません。 > (c)繰り返しの数はいくつくらいなのか?今後も増えそうなのか? 設定値をみて、値を変換するといった処理は100前後あります。 今後も増えますが、増えれば都度ソースを修正して対応するといった 方法で問題ありません。 以上、少し分かって頂けましたでしょうか?分かりにくい文章に なってしまい、申し訳御座いません。 具体的にこういうクラスを使って、こう実装すればいいんじゃないの、 というのが知りたいわけではありません。例えば、分岐ひとつに ついてパーシャルクラスをひとつ作ったらいいんじゃないの、という 実装の概要例が知りたいです。 引き続き、参考意見をお持ちの方宜しく御願いします。 | ||||||||
|
投稿日時: 2007-06-18 12:36
「設定値」による「変換」は、本当に全部ばらばらなんでしょうか。
なんらかのパターンはないんですか? ・nを足すか引くパターン ・mをかけるか割るパターン とか。 なんらかのパターンがあるなら、「設定値を見て値を変更する」のをループにして、 設定値aとcならこのパターンの処理を呼び出し、bとfならこのパターンを呼び出し、 とかいうことはできませんかね。 | ||||||||
|
投稿日時: 2007-06-18 13:18
普通分岐処理というと、 処理aで設定や処理結果をみて、trueなら処理cへ、falseなら処理dへ 処理cで設定や処理結果をみて、trueなら処理eへ、falseなら処理fへ 処理dで.<略> 処理g, 処理hへ というように設定や結果によって処理そのものが違った流れになるものを いうのでは? (合流することもあってややこしいですが) 今回やりたい処理は常に 処理a-処理b-処理c-... という流れなわけですね? であれば、
別に主処理が多少長くなっても意味が単純明解であればメインテナンスに問題は 発生しないと思いますし、そもそも100個やそこいらを長いと考えるかどうか... #本当に分岐が100回あったらパスの数は大したことになりますけど。 | ||||||||
|
投稿日時: 2007-06-18 13:37
あすかさん、書き込み有難う御座います。
そうですね。このようなつくりにするとかっこいいですね。 IProcessということはインターフェイスとして実装するという ことですよね?条件と処理だけだと、インターフェイスでなく ても良いように思いますが、インターフェイスにされた理由を 教えて頂けませんか?
たしかにそう思われます。しかし、もっとスマートな方法は ないのかと模索しております。静的な処理クラスも良いですね。 | ||||||||
|
投稿日時: 2007-06-18 13:42
mioさん、回答レスポンス有難う御座います。
具体的な例のために、単純に変換と書かせてもらいましたが、 実はその変換にはかなりの処理が含まれます。一部の変換処理を 共通化させることは可能かもしれませんが、分岐を共通化すること は出来ないと思います。 |
1|2|3|4
次のページへ»