多層架構通用查詢的思考

2022-04-29 17:48:07 字數 2654 閱讀 3032

一直沒在網上寫自己的心得,又總是看園子很多兄弟的文章。工作幾年了,工作經驗和人生感悟頗多的,中間夾雜著積極與消極、成功與失敗,各種的體會只有自己明白,希望消極的心態不會影響到大家,積極的大家就湊合借鑑和學習一下,嘿嘿。

搞了很久的管理系統,能抽象出來的還是很少。最初在表示層做通用查詢的時候,走了很多彎路,很是迷茫,在網上找了很多相關資料,有些做法是將所有欄位列乙個引數列表,通過值(是否為null或者string.empty)來判斷字段是否需要組合查詢。比如說getclients(int id,string name,int regionid,...),這種做法在改資料表字段時業務邏輯層還得重新對應相應的資料表字段。這樣,查詢字段要求和資料庫的字段一一對應,做法很不合理,最終架構被否定了。後來,看了dynamicquery原始碼後,我在實現通用查詢時,通過介面上設定業務屬性值,在業務邏輯層解析,而不是通過上面提到的引數組合,呵呵,輕鬆搞定了。它解決了通用查詢條件組合的依賴,利用反射技術,直接對實體類屬性進行條件組合查詢。在變更資料庫時,只需改變資料層的字段對映關係。現在用起來挺方便,唯一不足的是在業務邏輯層查詢時,訪問資料時都是載入所有的資料,沒辦法,只好考慮在業務邏輯層用資料快取了。dynamicquery沒有實現like關鍵字,我把like關鍵字的分析加上了。下面是通用查詢呼叫的大概步驟。

業務實體:

code

//////

客戶資訊

///[datacontract()]

public

partial

class

tbclient : gr.common.entity

set}

//////

客戶名稱

///[datamember()]

public

string

name

set}

//////

片區資訊維護

///[datamember()]

[system.componentmodel.browsable(

false

)]public

intregionid

set}

//////

客戶類別

///[datamember()]

public

string

clienttype

set}

//////

簡碼///

[datamember()]

public

string

shortcode

set}

//////

聯絡**

///[datamember()]

public

string

telset

}///

///聯絡人

///[datamember()]

public

string

linkman

set}

//////

位址///

[datamember()]

public

string

address

set}

//////

///[datamember()]

public

string

postcode

set}

//////

開戶銀行

///[datamember()]

public

string

accountbank

set}

//////

銀行賬號

///[datamember()]

public

string

accountno

set}

//////

稅務登記號

///[datamember()]

public

string

taxno

set}

//////

片區資訊維護

///[datamember()]

[system.componentmodel.browsable(

false

)]public

entities.tbregion region

set}

#endregion

#region

overrides

public

override

bool

equals(

object

obj)

public

override

intgethashcode()

#endregion

}介面層:

string strwhere = "name like '****' && region.id =10 ";

list= (new clients()).find(strwhere);

業務邏輯:

code

public listgetclients()

public

list

<

tbclient

>

find(

string

where

)修改後的dynamicquery**

多層架構的實現

我來說說 為簡單我去掉幾個字段 以下是使用抽象工廠模式,以應對資料庫的變化,也即可以寫兩個 或多個 資料層,乙個sql server的乙個orcal的,都繼承介面,只要在web.config中設定,便可以隨便你使用哪個資料庫 如果確定始終使用的是乙個資料庫,那麼可以把介面層和資料工廠去掉 1,先定義...

SaaS的通用架構

原文 對於 saas 產品設計來說,流程主要分為 3 步。首先是 理解業務 通過頻繁的業務調研,對產品所服務企業的運作流程有深刻的理解,包括客戶畫像 角色的種類和崗位特徵 核心業務工作流。做得時間久了,就會遇到這麼乙個問題,究竟如何以一種抽象的框架視角來全域性思考,讓設計出來的產品更加符合真實的業務...

關於新架構的思考

1.對request和session的深層封裝真的有實際意義嗎?2.如果request封裝的真的很厚實,那麼,我們必須要保證的,控制器在完全屏棄request以後,能夠方便獲取request中的物件.方便訪問session中的物件,這點,在分層體系架構的設計上是非常重要的.3.對於bo和持久層,以及...