基於Expression Lambda表達式樹的通用複雜動態查詢構建器——《劇透一下》

来源:https://www.cnblogs.com/ls0001/archive/2023/05/29/17441637.html
-Advertisement-
Play Games

本文通過對貧血三層架構進行精煉,推導出適合我們落地的應用架構,並且將之實現為Maven Archetype以應用到實際開發,然而應用架構只是落地DDD的一個知識點,要完整落地DDD還必須體系化地掌握限界上下文、上下文映射、充血模型、實體、值對象、領域服務、Factory、Repository等知識點... ...


前篇《https://www.cnblogs.com/ls0001/p/17437225.html》有大佬在評論里劇透了,這裡就來一遍劇透。

  通常,前後端分離的系統要在前端查詢數據是提交一個帶著查詢條件參數的表單,比如A=1,B=2,類似樣,後端接收到表單需要將這些條件參數拼接成查詢需要寫代碼,並且表單結構通常是不帶查詢邏輯屬性的,只能用and來聯接這些條件,給查詢的靈活性帶來了局限。

本框架就是要提供更靈活的,後端不需要寫代碼的一個查詢能力。

其中一個主要的應用場景正是實現實現只需前端傳遞JSON格式的查詢條件到後端,後端無需寫查詢代碼就能進行查詢。

其流程如下圖所示:

舉個例子:

前端提交來的查詢JSON:

 { 
     "lg": "", "filters":
     [ 
        { 
            "lg": "", "Predicates": 
            [ { "lg": "", "Name": "id", "Op": ">", "Value": 1 } ]
        }, 
        { 
            "lg": "and", "Predicates": 
            [ { "lg": "", "Name": "id", "Op": "<", "Value": 10 } ] 
        },
        {
            "lg": "and",
            "Predicates":
            [
                {"lg": "","Name": "name",  "Op": "=", "Value": "MyName"},         
                {"lg": "or","Name": "name","Op": "=","Value": "HisName"}
            ]
        }
    ]
}

 

後端只要如下代碼就可以了:

Query.Where(QueryFilterBuilder.CreateFilterExpression<Entity>(上面的JSON));
​

 

儘管前端JSON的構造也需要一個輪子,後續再說,本篇暫且先到這。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • hybrid混合開發是一種離線移動應用開發方式,它結合了Web技術和原生技術,以網頁的形式嵌入到一個原生容器中。 ...
  • > 隨著人工智慧技術的不斷發展,阿裡體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓**雲上運動會、線上運動會、健身打卡、AI體育指導**等概念空前火熱。那麼,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本 ...
  • 本文為千鋒資深前端教學老師帶來的【JavaScript全解析】系列,文章內含豐富的代碼案例及配圖,從0到1講解JavaScript相關知識點,致力於教會每一個人學會JS!文末有本文重點總結,可以收藏慢慢看\~ 更多技術類內容,主頁關註一波! ...
  • 這應該是這幾天以來看到的最簡單易懂的有二級菜單欄的導航欄效果實現了 使用html+css實現,看了好幾天導航欄的實現方式,要麼是太複雜的需要JS或者框架的,要麼是太簡單僅僅使用div和超鏈接的, 再要麼就是只有簡單的一級導航,沒有二級菜單欄的,心情複雜 就想找一個有二級菜單欄,使用html+css實 ...
  • ## **一、技術棧選擇** ### **1.代碼庫管理方式-Monorepo:** **將多個項目存放在同一個代碼庫中** ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4854d8dd45de421eb703075926746a30~ ...
  • URL,稱為統一資源定位器,指互聯網上能找到資源定位的字元串。在一般語境中,又稱網路地址或鏈接,當我們需要訪問某個網頁就需要輸入對應的網址字元串,而這個網址就是URL。 前端對於網址鏈接,提供了URL對象,可以用於創建或解析網址字元串信息;而Nodejs中也有相應模塊來處理網址,同樣支持URL類對象 ...
  • 在 JavaScript 中, arguments 是一個特殊的對象,它代表了函數調用時傳遞的參數列表。它可以在函數內部訪問,用於獲取傳遞給函數的實際參數值。 arguments 對象包含了函數調用時傳遞的所有參數,無論是否在函數定義時明確聲明這些參數。它是一個類數組對象,可以通過索引訪問其中的參數 ...
  • 技術架構師,將整間企業的IT開發流程至維運管理,視為一個大型系統進行規劃。並分為四個面向進行發展: - [開發平臺]:構建高度重用的共用模組和服務,並在多個專案項目和應用系統中使用,以提高開發效率並降低維護成本。 - [DevOps平臺]:建構連續集成、連續交付的工作環境,將開發與維運團隊更緊密地連 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...