1、從編程思想上來講,抽象類別首先是類,具有分類學的意義,有兩層含義,一是以研究對象的整體來劃分的,二是互斥性。類一定存在具體的對象才有意義。分類一般採用樹型層級進行。一般情況下,上一層分類都是對下一層分類的分類。而介面表達的是一種標準,本身不具有分類學意義,但可以作為一種分類的屬性。介面是從對象的局部特徵或者功能來進行的,但它並不代表對象。因此類表述的是一種“是(IS)”的概念,而介面表述的是一種“具有”或者“擁有”(HAS)的概念。至於抽象的概念,嚴格的講,在這個層次上,類本身就是一種抽象。
一般的Entity Framework都包括以下一些功能:1、與實體儲存體互動 原因很簡單,資料不能總在記憶體裡,最終還是要存起來,所以,Entity
Entity Framework一個基本的功能就是要與資料庫互動,與資料庫互動當然可以利用現有的一些基本技術,比如dotnet的ADO.Net等。這裡有幾個要點: 1)要封裝底層的資料庫互動通道,這個可以利用現有的資料庫訪問技術,比如ADO.Net。 2)構造與資料庫互動的SQL語句,比如新增,刪除,修改,查詢等.做得比較好的,需要支援關聯查詢等。當然能做到AEF中的ESQL那樣,還是有點難度。
因為資料持久層選型,這段時間查閱了很多資料,也做了很多實驗,感覺這個東西雖然很強大,但在做大型項目時還是缺少靈活性,主要在以下幾個方面:1、實體緩衝支援不夠靈活,雖然支援緩衝,但必須對ObjectContext進行單例或多例管理,而且哪些緩衝,哪些不緩衝,緩衝多少,如何重新整理,都不是很完善;2、ESQL不支援複雜的查詢,這對於ERP之類的軟體其實是個軟肋;3、如果要用edmx,分割和維護都是個麻煩事情;4、如果表在不同的ObjectContext(也許是edmx),關聯查詢無法執行;5、如果利
昨天有個朋友問題對mina是否有什麼最佳化的資料,他這邊一個系統壓到500並發就上不去了,開始在看中國好聲音,也沒多想,直接說我這邊沒有。後來中間休息的時候,發現回答的有點問題,心裡覺得其實應該告訴他壓測的tips,找到瓶頸才能知道問題所在,昨晚初略的說了一下,今天把以前的一些經曆回憶一下,貼出來,多少對一些新人有協助。
Author:放翁(文初)Email:fangweng@taobao.comMblog:weibo.com/fangwengBlog: http://blog.csdn.net/cenwenchu79/ 局部設計首先要說明的是,這部分內容和第一篇不同,必須對照代碼看才會理解其中的含義,光看設計實現會比較難懂其中所說的細節點。代碼:https://github.com/cenwenchu/beatles IComponent:
依賴對象一個主要的功能就是提供對相依性屬性屬性值的管理,所有需要具有相依性屬性的類都可以從這裡繼承,而無需自己去管理相依性屬性值。依賴對象的主要方法就是SetValue和GetValue兩個方法,這也是相依性屬性和普通屬性擷取值不一樣的地方,當然實際的應用中相依性屬性一般不會直接使用這兩個方法,而是封裝成普通屬性方式。另外對於相依性屬性,我們還提供了一個屬性值發生變化時依賴對象可以截獲的回調機制,這樣做的目的是增加對相依性屬性的控制,但需要注意的是這個控制是針對類的,而不是執行個體,因此處理的時
libevent源碼深度剖析十——支援I/O多工技術張亮 Libevent的核心是事件驅動、同步非阻塞,為了達到這一目標,必須採用系統提供的I/O多工技術,而這些在Windows、Linux、Unix等不同平台上卻各有不同,如何能提供優雅而統一的支援方式,是首要關鍵的問題,這其實不難,本節就來分析一下。1 統一的關鍵 Libevent支援多種I/O多工技術的關鍵就在於結構體eventop,這個結構體前面也曾提到過,它的成員是一系列的函數指標,
libevent源碼深度剖析十一——時間管理張亮 為了支援定時器,Libevent必須和系統時間打交道,這一部分的內容也比較簡單,主要涉及到時間的加減輔助函數、時間緩衝、時間校正和定時器堆的時間值調整等。下面就結合原始碼來分析一下。1 初始化檢測 Libevent在初始化時會檢測系統時間的類型,通過調用函數detect_monotonic()完成,它通過調用clock_gettime()來檢測系統是否支援monotonic時鐘類型:static void
代理模式(Proxy) ,英文又叫Surrogate。
有時候我們需要維護一些對象,這些對象具有一定的階層,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如Windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的對象按樹型結構來進行組織,表示成一種“整體-部分”的階層,使得使用者對單個對象和組合對象的使用具有一致性。組合模式的結構圖如下:角色: 組件介面:提供一致的提供者,注意組件介面可以是抽象類別,也可以是具體類,還可以用介面實現; 組合對象:含有孩子物件的對象; 葉子物件:
命令模式的意圖一是將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;二是對請求排隊或記錄請求日誌,以及支援可撤消的操作。簡略圖如下:命令模式通過對命令的封裝,將命令的請求(調用者Invoker)和執行(接收者Receiver)進行了責任分離,委派給不同的對象,不僅使得調用者和執行者之間實現瞭解耦(命令的請求方就不需要知道接收方的介面,也不需要知道命令是如何執行的具體情況),還使得可以記錄命令的執行記錄,添加執行日誌,使得命令的控制、執行、取消和重做變得容易。Delphi的Acti
《設計模式》一書對於訪問者模式給出的定義為:表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。從定義可以看出結構對象是使用訪問者模式必須條件,而且這個結構對象必須存在遍曆自身各個對象的方法。設想一個情境,就是學校,學校裡有老師和學生,老師和學生可以稱為兩種元素,我們可以對這些元素進行很多操作(注意,這些操作都是外部性質的,不屬於元素本身,這個至關重要),比如評價,問卷調查,採訪和體檢等,如果我們把這些操作定義在元素層次,顯然不合理,一是這些
技術的發展其實都是有跡可尋的.無論多高超,多神秘的技術都是在實踐->經驗->理論->再實踐->...的過程中發展起來的。今天之所以寫這個系列的文章,不是為了炫耀我有多牛,當然更不是為了裝B,“天外有天,人外有人”的自知自明我還是有的。我的目的其實很簡單: 1)對我兩個多月來學習和應用Silverlight做一個總結,以此紀念我為此耗費的青春;
對於一般程式語言,執行分為3種:1)編譯成二進位機器代碼,由作業系統調用執行;典型的如C,C++,Delphi等.2)編譯成中繼語言,由虛擬機器解釋來執行或及時編譯後執行(前者的典型是java,後者的典型是DotNet).3)不進行編譯,有解譯器邊解釋邊執行,比較典型的是VB和HTML,Javascript.等上邊這些與WPF有關係麼?其實是有的,至少原理上非常相似.我們來看看WPF的XAML的執行機制:1)首先是執行個體化頁面類;2)然後構建介面元素(控制項樹),這裡很關鍵,因為xaml檔案
libevent源碼深度剖析十二——讓libevent支援多線程張亮 Libevent本身不是多安全執行緒的,在多核的時代,如何能充分利用CPU的能力呢,這一節來說說如何在多線程環境中使用libevent,跟原始碼並沒有太大的關係,純粹是使用上的技巧。1 錯誤使用樣本 在多核的CPU上只使用一個線程始終是對不起CPU的處理能力啊,那好吧,那就多建立幾個線程,比如下面的簡單伺服器陣列景。1 主線程建立背景工作執行緒1;2 接著主線程監聽在連接埠上,等待新的串連;3
libevent源碼深度剖析九——整合定時器事件張亮 現在再來詳細分析libevent中I/O事件和Timer事件的整合,與Signal相比,Timer事件的整合會直觀和簡單很多。Libevent對堆的調整操作做了一些最佳化,本節還會描述這些最佳化方法。1 整合到事件主迴圈
在日常生活中,有很多需要我們關注的事務(比如,股市,樓市等),這些事務我們可以稱之為主題或者叫資訊發行者,觀察主題的目的是想瞭解主題的變化(訊息)。一種方法當然是採用盯人策略,但這種方法有個固有的缺點,就是你盯住主題的時候,無法幹其他事情,如果需要瞭解的主題比較多,這種辦法就很麻煩了;另外一種就是主題廣播,我想聽的時候我就去聽,不想聽的時候我就不聽,這種方式的好處就是可以使得觀察者不用盯住主題,但缺點是如果資訊發行者的資訊發布是不固定的,觀察者(資訊接收者)可能會漏掉資訊。這兩種方式都各有利弊,
在很多情況下對象之間的互動是很複雜的,在開始設計的時候,你根本不知道它需要互動的對象是誰,是什麼類型。我們知道如果要對象A與對象B之間能相互互動,A與B就會構成相互依賴,如果對象一多,這種依賴就會很複雜,況且很多時候我們都不知道需要互相互動的對象有哪些,因此,在設計的時候也沒辦法考慮這些情況。既然在設計的時候無法預Crowdsourced Security