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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

细节决定成败:一个公共类库

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 细节决定成败:一个公共类库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CLI缺憾之一:公共體系結構定義

Hierarchical Structure是一種應用極其廣泛的數據結構(樹結構),其意義完全可以和Collection結構相提并論。可是.Net FrameworkCLI提供了Collection卻沒有提供Hierarchy。絕大部分情況下,你可以通過其它方式(例如配合集合再定義一些接口)來實現,但是不能否認這些實現都很受局限,并且存在一些明顯不合理的依賴。我在實現業務邏輯的時候,想通過某種方式通知表現層通過Hierarchy的方式來處理。而表現層是通過一個實現Hierarchical Structure的公共控件實現的(這樣的情況在.net下非常普遍),沒有理由要依賴我特定的業務層。

我所期望的Hierarchy服務至少應該提供兩個接口和一個基類:

  • INode:節點,標定節點的標識、上級節點及子節點集合;
  • INodeList:節點集合,可以認為是IList的派生接口,除完成IList的所有功能外,還必須負責與父節點的連接。
  • NodeCollectionBase:節點集合基類,可以認為是CollectionBase的包裝版本,完成集合管理及父節點的標識。

之所以我覺得這個服務應該由CLI提供,很簡單的理由,這些結構應用非常普遍,完全應該是一種公共的、基本的依賴。

我設計的Hierarchy服務在Kanas.Hierarchizations命名空間,除了以上接口和基類外,還提供了一個服務類和兩個將普通類型包裝成Hierarchical結構的接口。

  • Hierarchy服務類:提供了大量Hierarchy的算法,例如求寬度、求深度、求子節點數、求級別等等,另外還通過相關的包裝器接口生成Hierarchy體系的功能。
  • IHierarchizer接口:提供將普通類包裝成INode的接口。
  • IHierarchizable接口:提供普通類的線型集合實例及IHierarchizer接口的實現。

應用場景:菜單,可視化的樹視圖,目錄體系、組織結構、財務科目、詞典類,等等等等。

?

CLI缺憾之二:可視化框架

.Net提供的PropertyGridVisual Studio.net設計時支持的基礎,為此,Microsoft.NetPropertyGrid提供了極其強大的擴展能力。ComponentModel命名空間下的很多類型及屬性都提供了對編輯器、設計器、類型轉換器的支持。不過很顯然地,其中存在一些設計漏洞,例如沒有提供足夠的抽象,直接導致了某些不必要的局限。其后果一是所有提供設計時支持的Attribute都幾乎只能應用于PropertyGrid,讓運行時類型背負設計時支持的包袱顯然有種職責不清的嫌疑;其后果二是PropertyGrid只提供了下拉和彈出兩種模式的類型編輯,當然目前是夠用的,但不能保證任何時候都夠用。

現如今我就遇到這個問題。TypeConverterAttributeTypeEditorAttribute這兩個屬性就必須進行Web架構的擴展而不是完全依賴WindowsForms。直觀的感覺是,設計時特征依賴運行時特征是合理的,相反則不合理。當然,設計時Attribute在運行時沒有任何意義,也不會給運行時帶來額外的性能問題。可是,為什么不能將設計時Attribute設計成更好的模型?例如可以設計成侵入式或者附加式。

我設計的對象設計時服務在Kanas.ObjectScope命名空間,采用的是附加式策略。當需要在運行時使用類似設計時服務的功能時便可以更靈活地使用。這個服務是基于一個XmlSchema,將對象的探查或展示方案部署到相應的配置文件中,運行時根據這些配置獲得設計時支持。與ComponentModel的設計思想一樣,這一套服務應該包括公共定義(契約)、配置提供器(服務)、對象展示及編輯(消費)三部分。

定義部分包括一個XSD規范及其對應的對象模型、一個數據轉換器接口和一個編輯器接口。配置提供器包括一個配置閱讀器基類(設計成Component以備設計時使用)、三個不同配置方案的實現(分別實現對Xml配置文件、Xml配置資源和全局配置文件節三種配置方式)。對象的展示是表現層的事情,本套服務不需要實現。不過在本套服務中,通過配置的數據轉換器接口實現了從對象集合到數據集的自動轉換,分別是Kanas.Common命名空間中的TypeBoundDataTableListDataTable。兩者的區別是:前者不依賴Scope方案,單純實現ICollectionDataTable的轉換;后者是前者的派生,可以通過Scope方案影響DataTable的生成。

當然,這個方案也存在很大的局限,甚至顯得非常粗糙。不過就其擺脫消費依賴來說還是有意義的。當然,眼下只實現了對Property的配置,缺乏對實現對invocationevent hook的擴展,也缺乏對更詳細的可視化屬性(例如ComponentModel中的CategoryAttribute)的定義。

這就是這個簡陋的schema

下載這個實現,如果需要源碼請來信索取。

總結

以上是生活随笔為你收集整理的细节决定成败:一个公共类库的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91亚洲欧美激情 | 亚洲美女啪啪 | 国产福利免费看 | 国产精品偷乱一区二区三区 | 色婷婷久久 | ,午夜性刺激免费看视频 | 日本黄色网络 | 色婷婷久久综合 | 久久高清 | 国产精品久久久久久久久岛 | 丰满白嫩尤物一区二区 | 找av导航| 国产一卡在线 | 国产a免费 | www四虎com | av片在线观看 | 狠狠干2020| 亚洲综合在线观看视频 | 免费在线看a | 欧美在线播放一区二区 | 国产让女高潮的av毛片 | 天堂网一区二区三区 | 奶水旺盛的少妇在线播放 | 亚洲午夜小视频 | 国产理论影院 | 国产日本欧美一区二区 | 88福利视频 | 亚洲天堂小视频 | 亚洲熟女乱色综合亚洲小说 | 成人区精品一区二区婷婷 | 久久久无码一区二区三区 | 国产一区在线观看视频 | 一区二区三区国产 | 丰满肥臀噗嗤啊x99av | 在线免费观看网站入口在哪 | 国产睡熟迷奷系列精品视频 | 华人永久免费视频 | 欧美成人激情在线 | 天堂网一区二区 | 在线播放www | 香蕉视频18 | 我们的2018在线观看免费高清 | 六月丁香在线视频 | 波多野结衣喷潮 | 天天爽天天爽夜夜爽毛片 | juliaann办公室丝袜大战 | 亚洲国产精一区二区三区性色 | 精品无码久久久久久久 | 午夜视频91 | 亚洲作爱 | 日本一级片免费看 | 91久色视频| 国产av成人一区二区三区高清 | 黄色一级免费视频 | 免费欧美视频 | 谁有免费黄色网址 | 美女露出让男生揉的视频 | 亚洲第一页色 | 亚洲电影中文字幕 | 男人日女人逼 | 可以免费看av的网站 | avav我爱av| 不卡av电影在线观看 | 日韩成人性视频 | 激情午夜影院 | 国产精品一级片 | а√天堂8资源中文在线 | 亚洲精品9999| 欧美视频免费看 | 欧美一区二区在线视频观看 | 亚洲砖区区免费 | 亚洲色图15p | 国产午夜久久 | 影音先锋中文字幕在线 | 久久噜噜色综合一区二区 | 日本综合色 | 日韩精选 | jizz毛片 | 在线观看xxxx | 青青草原国产 | 欧美精品一区二区在线观看 | 男人日女人逼 | 香蕉视频二区 | 日本中文字幕免费 | 欧美一区二区三区国产 | 国产成人精品av | 春意影院福利社 | 成人免费精品视频 | 女生裸体无遮挡 | 日本h在线 | 日韩欧美大片 | 在线亚洲天堂 | 国内露脸中年夫妇交换 | 极品美女扒开粉嫩小泬 | 黄色av网站免费在线观看 | 欧美午夜精品一区二区三区 | 九九久久精品视频 | 欧美成人tv | 成人午夜av|