none
WinForm 中有類似 ASP.NET ObjectDataSource 物件方便建立 三層式架構嗎? RRS feed

  • 問題

  •  

    我在 ASP.NET 中開發 三層式架構時,通常都使用 ObjectDataSource 連結 *.dll 中的 Class 以達到三層式架構的目的。

     

    但在 Windows Form 的開發中,要透過什麼元件實作?使用的物件跟 ASP.NET 是否一樣?

     

    小弟不才,請前輩指點迷津...

    2007年7月30日 上午 11:31

解答

  • 老實說,我沒有在用 ObjectDataSource。

     

    其實應該要實作像是 Web Service 這樣的中間層,來負責不同的用戶端,

    而 Web Service 再呼叫 Business Component 來處理,有了 Web Service,就可以保證

    Windows Forms 和 Web Forms 都可以使用。

     

    我想 Java 應該也有這樣的概念才對。

     

    ObjectDataSource 原先的用意應該也是希望透過 Web Service 或共用元件來源來轉換成相同規格的

    物件(例如 DataView,IEnumerate 物件等),然後提供統一的資料存取方法。

     

    不過與其用 ObjectDataSource,我還是習慣用自訂程式來傳回 DataSet/DataTable,這樣仍可套用到

    GridView 等資料繫結控制項中。

    2007年7月31日 上午 03:13
    版主

所有回覆

  • 我記得是沒有。

    建議你自行撰寫 DAL (Data Access Layer) 和 BAL (Business Layer)

    或者搭配 Enterprise Library 來實作。

    2007年7月30日 下午 12:20
    版主
  • 感恩...

     

    我是參考 MSDN2 上的文章 ObjectDataSource 來源物件範例(http://msdn2.microsoft.com/zh-tw/library/ms178538(VS.80).aspx) 實作出中間層,資料存取部份有用到 EnterpriseLibrary 的 Microsoft.Practices.EnterpriseLibrary.Data 的一些類別、物件之類。

     

    在 WebForms 上,我可以透過 ObjectDataSource 取用 GetAllData 等等的方法將資料撈到 Client。這方法很好用、也很快速...

     

    可是如果在 WinForms 的開發環境中,似乎找不到功能與 ObjectDataSource 一樣的物件...

     

    我試了 BindingSource 物件,雖然資料來源可以指到 Object 可是跟 ObjectDataSource 看起來是兩碼子事...

     

    如果真的沒有...那豈不是針對 WebForm 要寫一套中間層,針對 WinForm 要寫另一套中間層?

     

    如果真是這樣.....那.....真的很無言......

     

    是我的觀念有錯?還是我漏了什麼?還是我應該用別的方式去實作?

     

    小弟不才,才剛入門(從別的門派過來),請前輩不吝指教...~

    2007年7月31日 上午 01:25
  • 老實說,我沒有在用 ObjectDataSource。

     

    其實應該要實作像是 Web Service 這樣的中間層,來負責不同的用戶端,

    而 Web Service 再呼叫 Business Component 來處理,有了 Web Service,就可以保證

    Windows Forms 和 Web Forms 都可以使用。

     

    我想 Java 應該也有這樣的概念才對。

     

    ObjectDataSource 原先的用意應該也是希望透過 Web Service 或共用元件來源來轉換成相同規格的

    物件(例如 DataView,IEnumerate 物件等),然後提供統一的資料存取方法。

     

    不過與其用 ObjectDataSource,我還是習慣用自訂程式來傳回 DataSet/DataTable,這樣仍可套用到

    GridView 等資料繫結控制項中。

    2007年7月31日 上午 03:13
    版主
  • 嗯...

     

    聽了小朱大大的建議...瘋狂的測了一下...還是走回到 DataSet 與 DataTable...就如同小朱大大所說的一般...

     

    不過目前僅把 Business Component 封裝在 dll 中,讓程式直接 Reference,如果以後有需求要拆出來,屆時再延伸出去應該不至於太難...~

     

    感謝小朱大大ㄋㄟ...你給了方向...省去我很多摸索的時間...

     

    感恩...~

     

     

    2007年8月1日 上午 08:58
  • 之前也遇到這種需求,因為用習慣sqldatasource,在WinForm卻找不到好用的替代品,其實只要在引用命名空間時加入using System.Web.UI.WebControls;,就可以在WinForm中使用WebForm的控制項了,單就sqldatasource是OK的,不過這是不是正統的做法就不得而知了XD
    2007年8月10日 上午 01:56
  • WinForm 有沒有三層架構,已經做到不知怎麼使用了,而我目前用的是到底幾層也算不出來了,我用幾個方案大家可以參考一下.

    1.DataStoreLayer 用 SQL 2005

    2.DataLogicLayer 用 StoredProcedure

    3.DataAccesssLayer 用 MS Application Black 的 DataAccessBlock

    4.BizObjectLayer 自己寫

    5.BizLogicLayer 自己寫

    6.BizFlowingLayer 用 WF

    7.UILogicLayer用WPF

    8.UIPresentLayer用WPF

    由UILogicLayer去呼叫BizLogicLayer ,在由BizLogicLayer 去呼叫DataAccesssLayer從資料庫取得資料後回BizLogicLayer 然後轉成BizObject然後送回UILogicLayer後送到UIPresentLayer,呈現給User.

    而為來將在切一層WebService 和 WebProxy二層用WCF做,然後將BizLogicLayer轉到呼叫WebService 和WebProxy

     

    2007年8月10日 上午 07:30
  • 嗯...

     

    這一段時間一直不斷在 WebForm、WinForm、還有 Enterprise Library Data Access Block 打轉,有一些心得,提出來給大家做參考。

     

    1. Data Access Block 是個很不錯的套件,具有足夠的彈性,又顧及使用上的方便性,很值得推薦給大家;唯獨沒有中文文件,所以在入門會有一些障礙,但入門後,學習曲線是很平緩的。
    2. Data Access Block 在處理資料異動時是以 DataSet 為主,所以反推到資料讀取的部份,建議也是以 DataSet 為主,這樣整個系統開發起來也比較單純。
    3. 不論是 SqlDataSource 或 ObjectDataSource 物件,對 WebForm 開發來說可以有效加快速度,尤其在單一 Table 時,可是我面對的專案,單一 Table 的機會少之又少,對我而言 ObjectDataSource 大多只用再處理一些參考資料的顯示(如訂單中,客戶的聯絡電話、傳真電話等),主體資料(訂單的表頭跟表身)還是封裝在 DataSet 中。
    4. 目前我個人所期望的是,在思考一個分散式架構系統時,是不是有什麼方式可以讓 WinForm 或 WebForm 共用相同的中間層程式而不用針對 WebForm 弄一套中間層,WinForm 再弄一套中間層。也基於這個理由,當我在嘗試使用 ObjectDataSource 時造成很多的不便,我承認 ObjectDataSource 是很優質的元件,只是在考慮 WinForm 與 Data Access Block 的前提下,會受較多的限制。
    2007年8月10日 上午 10:40
  • 真對 JOHNNY LIN  說的做3.4.補充.

    3.以我目前做的專案,很少像一幫教學書裡面教的真對同一個Table然後放到DataGrid裡去做新查刪修的動做,通常會有很多Table做出一個View然後Show到UserControl,寫回去時在拆成很多Table分別寫入,所以我在做時都會針對每個Table做CRUD的StoredProcedure,會有一個新增,一個修改,一個刪除,多個查詢的StoredProcedure,然後由DataAccessBlock 取到前端由BizLogicLayer 取出轉換成 多個BizObject然後Show到UI,回來時在將原BizOject轉成多個Table相對映的新修刪做寫回動做.

    4.這次.NET 2.0 我覺得增強較多的會在ASP.NET 2.0 不管資料存取或安全...都是,但其實不要被誤導,其實Winforms也可以呼叫Asp.Net Namespace 裡面的功能.

    2007年8月11日 上午 03:41