iT邦幫忙

0

請問這段程式碼是否可以抽出並共用?

c#

最近有寫段程式碼,這段程式碼很多功能都會用到
但幾乎都是複製貼上,我想請問有沒有辦法把他抽出並共用呢?

          TestModel model = new TestModel1(); 
          model.Test1 = hdrsvc.FindTest1(SessionUserInfo().CID, model.StartDate, model.EndDate, model.STATUS,model.CheckBoxItem); 
           
           if (model.Test1.Any())
            {
                model.Test1.ForEach(x =>
                {
                    //業務邏輯
                    
                });

            }
            
            
          TestModel2 model = new TestModel2(); 
          model.Test2 = hdrsvc.FindTest2(SessionUserInfo().CID, model.StartDate, model.EndDate, model.STATUS,model.CheckBoxItem); 
           
           if (model.Test2.Any())
            {
                model.Test2.ForEach(x =>
                {
                    //邏輯判斷
                    
                });

            }

整體的框架大略是這樣
差別只在於model.Test1、model.Test2的型別及抓取的資料不同
但都需要跑foreach迴圈並作相同的邏輯判斷
所以不知道有沒有辦法將這程式碼抽出並共用呢?

看更多先前的討論...收起先前的討論...
石頭 iT邦研究生 2 級 ‧ 2021-02-23 16:02:01 檢舉
可以看你目前程式碼應該可以

給你一個提示 針對 FindTest1 和 FindTest2 這兩個方法使用多態
石頭 iT邦研究生 2 級 ‧ 2021-02-23 16:02:57 檢舉
把用成Hock方法做成Hock由子類別實現
tenno081 iT邦新手 4 級 ‧ 2021-02-23 16:12:13 檢舉
但是我的Test1 Test2裡還有許多的屬性欄位及其LINQ查詢的結果
這樣也能用多態嗎?
石頭 iT邦研究生 2 級 ‧ 2021-02-23 17:00:32 檢舉
看你實際程式碼 依照目前資訊我只能給這些建議 .
但依照我經驗你是有辦法 多態來處理
依照你上面描述可以朝向泛型思考看看
tenno081 iT邦新手 4 級 ‧ 2021-02-23 17:10:45 檢舉
感謝,其實我Test1 Test2的方法就有用到泛型
大概類似
Public List<TestModel1>FindTest1(...){}
這樣
只是因為我不只這一些,感覺用多載好像不適合
但我在想看看,謝謝

1 個回答

0
koro_michael
iT邦新手 5 級 ‧ 2021-02-24 12:28:50

我不知道 C# 適不適合用模板模式(Template Pattern)下去處理,但可以參考看看

tenno081 iT邦新手 4 級 ‧ 2021-02-25 16:14:28 檢舉

你好,這部分我有想過,不過暫時卡在型別問題@@

Java有一個共同的祖先叫Object,不確定C#有沒有,如果有,可以在之後去判斷是哪一個Class

boolean isInstance = someObject instanceof SomeTypeOrInterface;

我要發表回答

立即登入回答