日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

变色龙功能

發布時間:2023/12/3 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 变色龙功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在《神秘博士》中,卡梅利恩(Kamelion)角色是可以采取任何形式的機器人。 據稱,他們使用的物理道具非常麻煩,只有其創建者才能理解,而該創建者并沒有幫助糾正它。

因此,Chamelion功能...

考慮以下代碼:

public List<Document> getAllDocuments(Request request, int userId, String field) { Query q = createQueryFrom(request); switch (field) { case "title" : q.addCriteria(Criteria.where( "title" ).is(request.getTitle()); break ; case "name" : q.addCriteria(Criteria.where( "name" ).is(request.getName()); break ; ?default : throw new IllegalArgumentException( "Bad field: " + field); } return q; }

上面有很多事情。 讓我們來了解它。 出現了某種請求,我們可以從中進行基本查詢。 然后,根據調用方提供的字段,我們使用該字段向查詢中添加條件,并將操作數從請求中拉出。

最重要的是,如果調用者提供了一個我們不知道如何查詢的字段,我們就必須拋出一個錯誤。

這個功能怎么了?

我會告訴你怎么了...

這不是功能。 這是兩個功能。 另請參閱兩種音樂 。

調用代碼可能如下所示:

// one call site getAllDocuments(request, id, "title" ); // another getAllDocumetns(request, id, "name" );

我們正在使用字符串選擇來控制單個函數的一半流程。

比這更糟的是……當某些調用者發明一個我們從未聽說過的字符串時,我們需要拋出一個異常。

讓我們再重構一下:

public List<Document> getAllDocumentsByTitle(Request request, int userId) { Query q = createQueryFrom(request); q.addCriteria(Criteria.where( "title" ).is(request.getTitle()); return q; } public List<Document> getAllDocumentsByName(Request request, int userId) { Query q = createQueryFrom(request); q.addCriteria(Criteria.where( "name" ).is(request.getName()); return q; }

通過將其分為兩個功能,它可以自我記錄,易于遵循并且不需要處理流氓字符串。 它可能會稍微快一點,但這并不是真正的主要驅動力。

但是重復呢?

我懷疑變色龍功能的一種驅動程序是減少代碼重復的錯誤嘗試。 請注意,以上示例提供了在兩個函數( createQueryFrom)中重用的代碼示例,但每個函數中都有獨立的邏輯。 它不是重復的代碼。

我從中提取的示例可能最初有多行代碼,現在我們看到createQueryFrom可能引起了對重復的恐懼,這反過來又造成了怪物。 堅持不懈地重構以減少正確的重復,這樣的事情就不會發生。

翻譯自: https://www.javacodegeeks.com/2019/08/chameleon-function.html

總結

以上是生活随笔為你收集整理的变色龙功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。