業務系統設計之一 系統選單設計

2021-05-23 04:51:23 字數 2814 閱讀 9713

很久沒寫文章了,前幾天有幾個朋友問了我很多關於業務系統(erp,drp,crm等)設計裡很多概念性東西,花了很長時間給他解釋,最後他門還是知其然不知其所以然,這對於剛跨出學校大門的朋友來說,理解起確實有點枯燥。這裡我以以前參與的用友erp,drp產品專案裡的部分設計為參考,通過幾篇文章來和大家分享業務系統裡的部門平台通用部分的設計應用。

1、業務系統設計之一:系統選單設計

2、業務系統設計之二:系統主控設計(上)

本文主要介紹業務系統設計裡的選單設計,關注我部落格的朋友或許以前見過一篇我寫的關於選單的文章,文章連線:使用radcontrols的radmenu控制項開發系統選單

,這篇文章主要是介紹了radcontrols的radmenu控制項的基本使用,沒有詳細介紹到選單如何設計,為什麼要那麼設計。本文就以這片文章為基礎,同樣通過此文章的示例程式和示例資料庫,結合業務系統設計的相關術語介紹業務系統的選單設計。

首先看看上面的資料庫設計結構,其中id為自動編號的主鍵字段,code為選單編碼(也稱業務編碼),name為選單名稱, url為單擊選單所導航的路徑,imageurl為選單上顯示的位址,shortcut為快捷鍵,order為選單項顯示順序,grade為選單級限,endgrade為是否為末級選單(既最後一選單項),supmenucode為當前選單項的父級選單編碼(對應於code欄位),完整的還應該包括是否受許可權控制等字段,這裡不一一列出。

上面的資料庫設計其實很簡單,需要主要的字段有code選單編碼(也稱業務編碼),在業務系統裡通常設計為每一選單項都可以認為是乙個業務操作,這裡的code非常重要,業務系統的後續工作都是從這裡開始,通常與許可權設計結合使用得最多。

系統選單應該是多層次結構的,比如常見的windows選單,業務系統裡的選單設計同樣如此,通過supmenucode欄位來標記該選單項屬於那一項選單的子選單,如果沒有父級選單(系統頂層選單)則標記為0。

既然選單有層次結構,那就一定有層次標識,通過grade來標記;endgrade則表示當前選單項在該層次級別上的選單項上是否為末級。

分析清楚了需求和選單設計方案,下面我們著手**開發,下圖為專案解決方案截圖:

首先需要配置資料庫連串,如下:

1  private

static

string

connectionstring 

=  " provider=microsoft.jet.oledb.4.0;data source=

"  2      

+ @"

" );

接著我們需要乙個執行sql的方法,如下**塊:

1  private

datatable executequery(

string

cmdtext)2 

11      }

12  }

最後我們還需要寫兩個方法,乙個是查詢頂層選單的方法,乙個則是實現查詢選單下的子選單方法(做法有很多種,我個人建議把所有的資料查詢出然後在操作記憶體資料,這裡為了方便理解我故採用多次查詢資料庫的方式來實現)。

1  public

datatable getmenu()2 

6  7  public

datatable getmenubysupcode(

string

supmenucode)8 

ok,準備工作做好後,現在就是需要到ui層上去做選單的展現工作了。選單的展現我通過radcontrls的radmenu控制項來實現,此控制項相對asp.net的標準menu控制項功能強大。要使用radmenu則需要註冊控制項的引用,如果你是通過radcontrls控制項庫安裝包安裝的則會自動註冊到vs工具箱,和標準控制項使用方法一樣。

1  @ register assembly

= "radmenu.net2

"  namespace

= "telerik.webcontrols

"  tagprefix

= "rad

"  %>

1      

選單開始

--%> 2 

<

rad:radmenu id

= "systemmenu

"  runat

= "server

"  skin

= "vista

" > 3 

4      

選單結束

--%>

上面準備好了頂層選單的查詢方法,直接通過該方法查詢出頂層選單項對選單進行初始化:

1  protected

void

page_load(

object

sender, eventargs e)2 

7  }8 

9  menu menu 

=  new

menu();

10  private

void

initmenu()

11 

30  }

我們設計為多層次選單結構,那麼在初始化頂層選單的時候就應該判斷該選單項是否有子選單,如果有則也初始化子選單,如果是多級層次的結構,通過遞迴演算法來完成多層次的初始化。如下**塊:1 

2  private

void

initsubmenu(radmenuitem item, 

string

supmenucode)3 

24          }

25      }

26  }

業務系統設計之一 系統選單設計

很久沒寫文章了,前幾天有幾個朋友問了我很多關於業務系統 erp,drp,crm等 設計裡很多概念性東西,花了很長時間給他解釋,最後他門還是知其然不知其所以然,這對於剛跨出學校大門的朋友來說,理解起確實有點枯燥。這裡我以以前參與的用友erp,drp產品專案裡的部分設計為參考,通過幾篇文章來和大家分享業...

業務系統設計之一 系統選單設計

本文主要介紹業務系統設計裡的選單設計,關注我部落格的朋友或許以前見過一篇我寫的關於選單的文章,文章連線 使用radcontrols的radmenu控制項開發系統選單 這篇文章主要是介紹了radcontrols的radmenu控制項的基本使用,沒有詳細介紹到選單如何設計,為什麼要那麼設計。本文就以這片...

十一 系統設計

1.在短時間內構建乙個簡單可實現的演算法,執行資料並通過交叉檢驗來驗證資料 2.完成第一步後,便可以繪製學習曲線,通過曲線觀察演算法是否有高偏差或者高方差的問題,以此作為下一步決策的依據,是新增更多訓練集還是增減特徵等等 3.人工檢查交叉驗證集中 失敗的資料 誤差分析 來發覺演算法的缺陷去修復 類偏...