検索

ホームページ  >  に質問  >  本文

if - Java代码多分支语句优化

1.项目背景
一个controller,一个serivce,多个dao层
service里面更具用户的不同参数调用不同的dao进行实例化,时候在调用方法。
2.不要问为什么设计,那是因为一个模块对应37张表,用户根据下拉选择输入不同的表单(说白点,点击页面新增弹出下拉框,让用户选择填写那张表单,再来一句,各个表之间没有相同的字段),所以此模块肯定是一个controller,一个service,各个dao对应不同的表进行增删改查操作
3.所以在service层必然有一个语句需要判断实例化那个dao,用注入也行
if(flag == dao1){

}else if(flag == dao2){

}else if(flag == dao3){

}else if(flag == dao4){

}else if(flag == dao5){

}else if(flag == dao6){

}
........就要写25个(不管是switch还是if都避免不了)
4.所以这样的方式有没有好一点的方式进行处理,不用写这么多的判断。

PHP中文网PHP中文网2827日前567

全員に返信(8)返信します

  • PHP中文网

    PHP中文网2017-04-17 17:41:01

    フロントエンドから dao の名前を繰り返さずに、リフレクションを通じて Dao 層を呼び出すのが良いと思います。
    これは単なるアイデアです。

    返事
    0
  • 黄舟

    黄舟2017-04-17 17:41:01

    あなたの質問にはすでに「聞かないでください」「間違いなく」などの肯定文がいくつか含まれているため、他に何も言うことができません。ファクトリ モードまたはマネージャー モードを試して、フラグ値に基づいて対応する dao インスタンスを取得できます (実際には、この醜いコードを暗い隅に移動するだけです)。

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 17:41:01

    ポリモーフィズム、またはテーブル駆動モード (コード集の第 18 章を参照)

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 17:41:01

    明らかに設計上の問題ですが、それでも少し頑固です

    返事
    0
  • 迷茫

    迷茫2017-04-17 17:41:01

    プロジェクト構造の問題。 Javaの特徴を考えてみましょう。カプセル化。継承ポリモーフィズム

    返事
    0
  • 迷茫

    迷茫2017-04-17 17:41:01

    インジェクションという言葉について言及したので、Spring フレームワークを使用していると思います。Spring の applicationContext は、コンテナによって初期化されたすべての Bean を取得できます。通常、フレームワークには BaseDao などのデータ アクセス層の抽象化があります。次に、baseDao=applicationContext.getBean("beanName") を使用して、必要なことを実行できます

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:41:01

    マップを構築します
    map.put("dao1",dao1);
    map.put("dao2",dao2);
    map.put("dao3",dao3);
    次に、ページのパラメータを通じてマップのキーを選択し、dao を取得します
    もちろん、Spring を使用している場合、このマップは Spring XML で直接設定できます

    返事
    0
  • PHPz

    PHPz2017-04-17 17:41:01

    if else ステートメントと switch case ステートメントはどちらもコマンド モードを使用して再構築できることを覚えています

    リーリー

    その後、制御層は servicecontrol を直接使用できます。このようにして、制御層は dao から分離され、両側の変更は相互に影響せず、xml を通じて調整されます。

    返事
    0
  • キャンセル返事