推 neo5277: 我看到1=1了耶... 11/22 01:29
推 neo5277: 也不要用* 11/22 01:30
→ peter98: 把條件弄成dynamic 不要hardcoded 設定好權限 讓個別 11/22 01:32
→ peter98: user可以選要加甚麼條件在filter裡 我做過這個 很難寫 11/22 01:33
→ peter98: 難在一堆無聊人士搞audit 設定權限他們也不懂 11/22 01:33
推 neo5277: 辛苦啦,我是建議你讓sql參數化單純一點,把條件的東西搬去 11/22 01:34
→ neo5277: c#用策略模式做 11/22 01:34
→ neo5277: 然後多使用虛擬類別,多的kpi用介面去加 11/22 01:35
→ neo5277: 這樣你sql就相對單純 11/22 01:35
→ neo5277: 現在這樣筆數多撈起來會很慢吧... 11/22 01:36
推 neo5277: 然後你sql要板控的話可以加一個sql,專案在方案裡 11/22 01:49
→ neo5277: 最終還是sp化接參數再透過策略選擇呼叫那一種就好 11/22 01:49
→ neo5277: 好維護,改起來也快,而且會好閱讀很多吧 11/22 01:50
→ airtsubasa: 1=1是為了 後面串條件方便吧 應該是後面可能不會出現 11/22 06:52
→ airtsubasa: 條件 11/22 06:52
→ play714: 不太懂分那麼多支loader 的原因為何? 11/22 08:39
推 CRPKT: 先把上游資料轉成同樣格式,query 的部分再跟著 area 版控 11/22 09:22
→ CRPKT: 現在這樣維護成本就是 loader 與 area 數量乘開 11/22 09:23
→ CRPKT: 把東西拆到讓維護成本變成加法是唯一的活路 11/22 09:24
→ enthos: Game Live patch:做多種MOD讓使用者自行訂閱 11/22 09:32
推 giacch: Loader1.GetSQLText(Area1), Loader2.GetSQLText(Area1) 11/22 11:41
推 wulouise: query可以獨立分開放在檔案裡讀吧? 11/22 12:08
噓 sniper2824: JavaScript 為什麼你要分開寫 11/22 12:35
→ brucetu: 你做好一版 馬上把所有可能被影響的loader/area重跑 比 11/22 17:12
→ brucetu: 對實際被影響的資料是否符合你預期 先建立這樣的系統避免 11/22 17:12
→ brucetu: 改A壞B沒發現 再來談重構 11/22 17:12
→ brucetu: 會發生改a壞b表示你有共用的code卻允許共用的其中一個需 11/22 17:14
→ brucetu: 求端任意更改 這當然不正常, 如果一種東西會被多個需求 11/22 17:14
→ brucetu: 端各自提需求修改 那這種東西不論有多相似 都應該建立單 11/22 17:14
→ brucetu: 獨的class 11/22 17:14
→ brucetu: 你的整個重構會很複雜不是你一人一兩個月就能完成 一定要 11/22 17:15
→ brucetu: 先建立確保不會改A壞B的機制 11/22 17:15
→ brucetu: 你這正常的架構就是要先定義原始資料類別有哪些, 聚合資 11/22 17:16
→ brucetu: 料的filter有哪些 11/22 17:16
→ brucetu: 你的loader程式應該要給每個最終報表有適當的命名 同時 11/22 17:19
→ brucetu: 有文件紀錄每個報表會有哪些單位查看 11/22 17:19
→ brucetu: 每一支報表由哪些資料源以及哪些filter算出中間的結果以 11/22 17:25
→ brucetu: 及最終報表 要有文件 11/22 17:25
→ brucetu: 當有人跟你說 他要增加採計AA類別 你就去查程式 採計AA 11/22 17:30
→ brucetu: 類別這個行為是哪一支filter在處理, 有其他單位用到嗎? 11/22 17:30
→ brucetu: 如果沒有 那大概就是直接修改這支filter 最終報表就會是 11/22 17:30
→ brucetu: 他要的結果 也不影響別的單位. 如果有其他單位用到 你可 11/22 17:30
→ brucetu: 能需要拆分成兩支filter給兩個單位使用 或是你的這個filt 11/22 17:30
→ brucetu: er可以吃參數 那就是兩個area吃不同config即可. 最重要是 11/22 17:30
→ brucetu: 不管你的架構如何 改完就是要測試確保沒有動到不該動的 11/22 17:30
→ brucetu: 東西 這就是測試的覆蓋率的重要性 11/22 17:30
→ brucetu: 最後建議 直接換工作 11/22 17:31
推 jellyfishuan: 不太懂 老闆聽你這樣解釋之後還是認為是你的問題嗎 11/22 17:58
→ jellyfishuan: 通常這樣看你敘述下來就知道是架構問題了吧? 11/22 17:58
推 f821027: SQL WHERE 用 python 的 f-string 把 list 傳進去,這樣 11/22 18:43
→ f821027: 只要更新這個list就好 11/22 18:43
推 bills1987: 像是水流一樣,資料一站一站往下流,就很好追蹤!可能會 11/22 21:02
→ bills1987: 變動的地方可以另開TABLE存放參考物件AA ,BB...後續就 11/22 21:02
→ bills1987: 算新增參考,也只需更動參考TABLE內容,MAIN SQL部分只 11/22 21:02
→ bills1987: 要寫好關聯,後續就不用一直改 11/22 21:02
→ tinasfishs: 已經有參數化,loader唯一有設計的就是把同一支loade 11/22 23:58
→ tinasfishs: r的可能10幾、20幾支SQL擺在同一個class,然後用retu 11/22 23:58
→ tinasfishs: rn string的方式去return SQL,只是除了用class的殼 11/22 23:58
→ tinasfishs: 包住&部分用參數之外就沒做其他的了。參數有的帶了6- 11/22 23:58
→ tinasfishs: 7個結果還是沒辦法把SQL拆到自由度完全釋放 11/22 23:58
→ tinasfishs: 我的確很想by Area去把SQL list拆出來,但是可能和其 11/23 00:06
→ tinasfishs: 他公司不同,SQL除了擺在公司共用的SQL池以外就是只 11/23 00:06
→ tinasfishs: 有hard code一法,SQL池只是儲存string跟參數位置, 11/23 00:06
→ tinasfishs: 假設要把本來是hard code的條件改成帶參數,就是原本 11/23 00:06
→ tinasfishs: C#裡面call SQL池的地方要改。例如string SQL=sql po 11/23 00:06
→ tinasfishs: ol(type,gender)要改成SQL=sqlpool(type,gender,age) 11/23 00:06
→ tinasfishs: 就要重新上code,不能自行維護一份txt檔就好 11/23 00:06
→ tinasfishs: 感覺前人在這樣的infra環境下,選擇hard code或是擺S 11/23 00:10
→ tinasfishs: QL pool需要的effort是差不多的,為了快速完成,也不 11/23 00:10
→ tinasfishs: 會去選擇把TABLE裡每個欄位都拆出來寫成class…table 11/23 00:10
→ tinasfishs: 跟table我覺得關聯性很差,常常出現10幾個column的ta 11/23 00:10
→ tinasfishs: ble,我資料庫不強不知道這算不算是架構不好的象徵QQ 11/23 00:10
→ tinasfishs: 但大家的建議都很棒,我會多尋找機會點的!謝謝 11/23 00:12
推 giacch: sql = "" + 11/23 00:55
→ giacch: (age != null ? "" + 11/23 00:55
→ giacch: "\n and age = @age" + 11/23 00:55
→ giacch: "" : "") + 11/23 00:55
→ giacch: ""; 11/23 00:56
推 giacch: 藍色的if可以寫成上面哪樣, 字串一直串 11/23 00:59
→ giacch: 不想整個Code重上, 可以拆成不同project (dll) 11/23 01:04
→ giacch: 若你將所有C# Code都寫在一個cs檔,就可以實現維護一份text 11/23 01:14
→ giacch: 參數太多可以考慮用一個物件來放 11/23 01:21
→ giacch: (type, class or Dictionary<string, object> args) 11/23 01:21
推 hanshsu: c# call sqlpool interface 改成傳 object 就可以解決改 11/23 11:16
→ hanshsu: 來改去的問題? 11/23 11:16
推 giacch: 樓上是講我嗎? "實現維護一份text"那一行只是玩笑話 11/23 11:28
推 giacch: 不太懂樓上的意思 11/23 11:40
→ lazarus1121: 另外花點時間寫一支自己理解後的模組? 11/23 12:10
→ lazarus1121: 然後兩邊比較結果,久了沒問題就能把舊的取代 11/23 12:10
→ qss05: 如果你會很常異動邏輯,通常會把核心做成view有需要再篩選 11/24 22:53
→ qss05: 吧,這樣就從資料庫改就好,子查詢也可以做成function放在 11/24 22:53
→ qss05: 資料庫 11/24 22:53
推 ck237: 這個架構也太神奇了吧? 11/25 01:09
推 jack0204: 為啥不從程式去處理要用SQL去處理? 11/26 09:11