Soft_Job 板


LINE

「半夜睡不著覺, 把心情哼成歌」 大家晚上好, 因為開發卡關卻又睡不著所以上來聊聊近況並且請求建議與協助 先介紹一下我自己, 目前職稱是後端工程師, 使用語言為php, 相關年資累計約五年四個月 目前手上的 Project 使用 Laravel Framework 開發, 程式碼架構依目錄區分為 Controller(Presentation)->Service(Business)->Repository(Data)->Entity 基本上各層的存取範圍以箭頭方向為準且不可逆, 但因為協同開發的關係偶爾還是會出現 Controller直接存取Repository的情況 因為沒有新的 feature/issue 的關係, 所以本週有空檔可以回頭整理之前寫的程式碼 越整理我就越沮喪 我發現自己沒有分辨哪些邏輯該歸類到哪一層的能力, 舉例來說: -- 有一個 MemberService 的 Class, 負責跟會員有關的操作 裡頭有一個方法 paginate 會回傳指定頁數與數量的會員資料, 除了吃指定頁數與數量的參數以外這個方法也吃另一個叫 $filter 的參數 $filter 是陣列型態, 我會在方法的最開始檢查這次的 $filter 傳了哪些篩選條件進來 & 這些篩選條件有沒有符合預期的型態 在這裡我會想: $filter是陣列豈不是說其他要使用這個方法的人還需要知道可用的 key 有哪些? 那是不是把 $filter 拿掉改成 addNameFilter(value)->addGenderFilter(value)->paginate(page, perPage) 這樣比較好? 緊接著另一個聲音又出現了: 這樣是不是例外新增一個 MemberFilterService 比較好? 不然篩選條件越來越多怎麼辦? 後來我保留 $filter, 檢查完 $filter 之後丟給 Repository, 在 Repository 裡頭又寫了一些 if-else 判斷 $filter 提供了哪些篩選條件(但沒檢查內容是否符合預期型態) 然後我又想: 是不是乾脆把檢查的程序搬到 Repository 來就了? 或是在 Repository 裡頭加 addXXXXFilter? 可是這樣 Service 不就沒事幹了? --- 諸如此類的狀況, 導致本週我根本沒做多少事情還創造出一些荒腔走板的程式碼 我可以很快的完整交待的 feature/issue, 只要我能夠忍受程式碼職責切分不清 但事實是我也想不出更好的寫法, 深深感受到自己的無力也對於沒有任何產能感到壓力 希望版上各位前輩能對我這樣的困境給一點建議跟方向, 推薦書籍也行, 我最愛買書了(但都沒時間看QQ) --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.71.15.173
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1530813105.A.DBF.html
1F:推 ttt95217: 這個直接電死 07/06 03:05
2F:推 panda04056: 找 refactor 相關的書籍? 07/06 03:20
3F:推 jj0321: Bob大叔是精神支柱 07/06 08:13
4F:推 handwu: 建議可看看Domain driven design的書,對於各層職責會有 07/06 08:36
5F:→ handwu: 不同的想法 07/06 08:36
6F:推 ripple0129: 按照基本思維,Service是功能,Filter自然是在Service 07/06 10:56
7F:→ ripple0129: ,key不是問題,想用你的filter的人自然本來就需要了 07/06 10:56
8F:→ ripple0129: 解你的filter使用方式,不然就寫個enum用autocomplete 07/06 10:56
9F:→ ripple0129: 來選key。 07/06 10:56
10F:推 abccbaandy: 同樓上,不然就學JAVA流吧,一堆o,定義的清清楚楚 07/06 11:42
11F:→ ymps3502: https://tinyurl.com/ycr7e4qp 07/06 13:20
12F:推 Argos: 先提醒 小心走火入魔 XD 07/06 21:26
13F:→ Argos: 基本上要把握一個大原則 「不要為了設計而設計」 07/06 21:26
14F:→ Argos: 要為了「改變」而去做設計 也就是說 當你困惑該怎麼分職責 07/06 21:27
15F:→ Argos: 或要使用哪一個架構時 先使用最簡單 最方便 最直覺的方式解 07/06 21:28
16F:→ Argos: 功能做出來測試也做好之後 想一想 這個部份是否「很常改變 07/06 21:28
17F:→ Argos: 」 如果幾乎不會改變 或是依照目前情況看下來 應該是不太會 07/06 21:29
18F:→ Argos: 有變動 那就可以放著了 如果你不確定這部份是不會之後會修 07/06 21:30
19F:→ Argos: 改到 你可以和其它工程師和需求方討論看看 甚至做個小投票 07/06 21:30
20F:→ Argos: 如果一開始就知道這部份常常會因為需求變化而要做更動 那就 07/06 21:31
21F:→ Argos: 得思考更靈活 但卻更複雜的架構了 這時再來重構它 07/06 21:31
22F:→ Argos: 回到你提的案例 真正要問的問題 是你的filter未來半年到一 07/06 21:33
23F:→ Argos: 年內是否會因為需求而要作修改 如果看起來不太會 那就用最 07/06 21:33
24F:→ Argos: 初的驗證寫好就好了 別再自尋煩惱 07/06 21:34
25F:→ Argos: 職責切分不清不是大問題 真正的問題是出在 你在沒有必要的 07/06 21:35
26F:→ Argos: 地方 也做了SOLID和設計模式 造成overdesign 07/06 21:35
27F:→ Argos: 要知道 職責不是分得越細越好 把東西拆開了 是有代價的 07/06 21:36







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl 或 站內搜尋

TOP