2010-04-09 35 views
0

我們的系統複雜性已經上升到需要將數據庫中與客戶端綁定的權限名稱更具體化的程度。在客戶端中,權限是從一個靜態類引用的,因爲很多客戶端功能依賴於每個用戶擁有的權限以及角色的種類。我以this post爲例,但我正在尋找更具體的用例。就拿這個基準,其中PermissionAlpha將是一個常量字符串:以字符串形式檢索類名稱層次結構

return HasPermission(PermissionNames.PermissionAlpha); 

這是偉大的,但現在,事情正在變得越來越複雜的類來構成這樣的:

public static class PermissionNames 
{ 
    public static class PermissionAlpha 
    { 
     public const string SubPermission = "PermissionAlpha.SubPermission"; 
    } 
} 

我m試圖在這個新的設置中找到一個簡單的方法來引用PermissionAlpha,它的行爲類似於上面的第一個聲明。要做到這一點的唯一方法就是像下面的例子那樣採用拉類名的值?我試圖把所有的名字保存在一個可以在應用程序中的任何地方引用的地方。

public static class PermissionAlpha 
{ 
    public static string Name { get { return typeof(PermissionAlpha).Name; } } 
} 

**編輯** - 添加缺少的權限名稱。

回答

0

也許這將是太大了,你改變你的項目的規模,但我們有所有的我們的業務對象被分成部分類。一種是手動更改,一種是生成的。在代碼生成過程中,我們將權限密鑰從我們的「單一來源」編寫到部分類的生成側。我們使用一組類作爲我們的真實來源和CodeDom來生成,但您也可以使用數據庫作爲源,並使用T4,CodeSmith或其他來生成。

+0

我認爲對於這個特殊的變化,考慮到時間限制,這會有點困難。不過,我們希望很快能夠移植到Silverlight,這絕對是值得考慮的事情。有沒有關於如何設置的例子?概念化有點困難。 – 2010-04-09 18:21:01

+0

我會繼續前進,並在做更多的研究後接受它。切換到這種模式看起來可能是一個不錯的方法。謝謝! – 2010-04-11 10:47:38

+0

酷!一旦你開始代碼生成,你永遠不會想回去。 – adam0101 2010-04-13 12:54:46

0

爲什麼不在相關類上創建可反射的屬性?這樣可以添加所需的所有額外信息。我提供我的博客上的文章占卜屬性的題爲方式:

C# Using Extended Attribute Information on Objects

HTH

+0

我已經考慮過了,我們確實在代碼中爲其他例子做了這些,特別是Enums,我寧願只引用類名,以避免在XAML中使用如此多的ValueConverters,並且在每個地方引用和使用GetDescriptionAttibute我需要引用權限(這比Enums更常見)。 – 2010-04-09 17:52:08