隨筆 - 1, 文章 - 0, 評論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          我的評論

          re: “設計”你的代碼[未登錄] onkyo 2010-04-30 09:39  
          @Johnny.Liang
          我只是就博文中我不太認同的地方發(fā)表一下看法,大家探討一下相互提高。

          首先我非常同意 設計是要針對需求的 的這句話, 這個流程相當穩(wěn)定,不存在多態(tài)的情況,那么第一種寫法

          public void onMessage(InstructionInfo instructionInfo) {
          if(xx && yy && zz) { // 停留在后端等待執(zhí)行指定的工作流程
          // 根據(jù)每種組合進行條件判斷,走哪個流程
          if(a==true && b==true && c==true && d==true {
          ...
          }
          else if(...) {...}
          else if(...) {...}
          ...
          else(...) {...}
          }
          }

          我覺的完全可行。 何必再拆分出兩個類? 還便于閱讀,便于修改。 因為邏輯都集中在一起了。 這就是面對過程的設計, 非常的合理。

          正如博文題目設計你的代碼: 每個正確成長的程序員,都必須從編碼開始,慢慢鍛煉抽象思維、邏輯思維、面向對象思維,然后慢慢的過渡到系統(tǒng)設計,再隨著經(jīng)驗和知識的積累,慢慢過渡到架構設計。

          既然我們要抽象上述的代碼, 要使用面對對象思維,要重構上面的代碼, 就應該搞清楚為什么要用抽象,為什么要面對對象思維。 抽象和面對對象編程的目的無非是最大限度的重用。 那么就應該面對接口編程, 解耦關系。

          我的觀點就是既然要設計,就要好好設計。 如果要用省事的方法,那就用最省事的方法。

          re: “設計”你的代碼[未登錄] onkyo 2010-04-28 17:54  
          個人覺得比較好的方案是聲明一個interface

          public interface WorkflowFactroy {
          Workflow create(Instruction info)
          }

          把邏輯寫在WorkflowFactoryImpl里面, 用ioc注入WorkflowFactoryImpl.
          re: “設計”你的代碼[未登錄] onkyo 2010-04-28 17:42  
          小小的砸一下磚,大家探討一下:

          我比較質(zhì)疑以下這兩點
          “純面向對象的思維方式” 和 “內(nèi)聚高,耦合低”。

          和原來的代碼比較的話就是把原來集中在一起的代碼分散了。

          首先 InstructionHandleDecisionMaker 和 InstructionWorkFlowSelector 就不是面對對象的設計, 用的是都是static函數(shù)。 實際上就是把原來代碼中的
          onMessage 中的代碼, 歸了一下類,拆成一些小函數(shù), 然后再插到InstructionHandleDecisionMaker 和 InstructionWorkFlowSelector 文件中去。 其實際上就是

          public void onMessage(InstructionInfo instructionInfo) {
          if(isHandledByBackEnd(...) ) {
          WorkFlow wf =getWorkFlow(...);
          //TODO Implment the logic
          }
          }

          private static Map mapping = new HashMap();
          static {
          mapping.input("YYNN",WorkFlow.A);
          mapping.input("NNYY",WorkFlow.B);
          ...
          }

          private WorkFlow getWorkFlow(Instruction info) {
          ...
          }

          private String isA(...) {}
          private String isB(...) {}
          private String isC(...) {}
          private String isD(...) {}

          不能繼承,不能重用。

          其次代碼是高耦合的, 當流程的判斷條件變更的話是需要修改代碼的,因為判斷條件是寫死在代碼里面的。 (當然這就是為什么需要工作流框架的原因)
          在postgresql 數(shù)據(jù)庫的源代碼contrib文件夾下面, 有一個模塊:tablefunc

          postgresql 把 connectby 做成了一個函數(shù)。

          對于sql2005和mysql你可以參考一下, 自己寫一個函數(shù)。

          在數(shù)據(jù)庫里面做遞歸比在程序里面至少快2個數(shù)量級
          這樣遞歸錯是沒錯,但是太過理想化了, 在實際應用中基本很少能用上這樣的代碼。

          設想一下比如一張表保存了所有工料信息(article-component) 里面有100萬條數(shù)據(jù)記錄。 如果使用樓主的算法耗時過長而且很可能out of memory。

          其實就用一句SQL就可以了,不需要在程序里面遞歸。
          既然樓主用了Oracle那就了解一下start with connect by 的用法吧
          主站蜘蛛池模板: 彭州市| 广南县| 云南省| 乐东| 承德县| 霍城县| 南昌县| 柳州市| 中卫市| 鄂尔多斯市| 胶南市| 瑞丽市| 麦盖提县| 平湖市| 新田县| 宝坻区| 米泉市| 桐庐县| 金华市| 桐乡市| 绥中县| 临泽县| 神木县| 阜康市| 九寨沟县| 安宁市| 潜江市| 开鲁县| 康平县| 凤山市| 澄迈县| 福州市| 治多县| 鹤山市| 凤城市| 衡阳市| 洪雅县| 明水县| 恩施市| 梅州市| 那坡县|