四、利用EnterpriseFrameWork快速開發基於WCF為中間件的三層結構系統


回《【開源】EnterpriseFrameWork框架系列文章索引

EnterpriseFrameWork框架實例源代碼下載: 實例下載

      本章內容與上一張《利用EnterpriseFrameWork快速開發Winform系統(C/S》關系緊密,WCF模式只是在Winform模式中的界面層和邏輯層之間加入了WCF中間件用來實現雙方的通訊,說得更簡單一點就是把Winform模式中的winController控制器給拆分為wcfControllerwcfclientControlle兩個控制器並用WCF實現兩個控制器之間的通訊,雙方數據傳遞與Web模式一樣用Json數據格式;

      還有一點就是我們一定要明白WCF模式並不是說把所有業務都封裝成wcf服務提供給界面層調用,wcfControllerwebController一樣只是單純的業務控制器,而wcf服務在框架中也只有一個就是在WCFHosting服務主機中WCFHandlerService,用來實現通訊的

 

本文要點:

1.WCF版界面效果

2.WCF項目開發步驟

3.代碼文件調用關系圖

4.常見問題匯總

 

      1.同樣是用書籍的管理作實例,實現對書籍的增、刪、改、查功能,我們先看界面效果

      如下,請注意紅色框部分,點擊界面的保存按鈕后,第二張圖的WCF主機就會接收到保存書籍的命令並執行,紅色框為執行過程;(其中WCF主機會再后續章節詳細說明)

       

      

 

      解決方案目錄,其中紅色文件為本章實例新增的文件

       

      2.開發步驟:

      1)新增WCF控制器,如上(bookWcfController.cs)

      2)新增WCFCient界面控制器,如上(bookwcfclientController.cs)

      其中實體(Book.cs)、Dao(BookDao.cs)和界面(frmBookManager.cs)在上一章實例中已經完成,所以本章直接調用就行了,加上本章新增的bookWcfController.cs和bookwcfclientController.cs就可以讓WCF模式實例運行起來;

 

bookWcfController.cs文件

using System; using System.Collections.Generic; using System.Linq; using System.Text; using EFWCoreLib.WCFHandler; using Books.Entity; using Books.Dao; using System.Data; namespace Books.WcfController { [WCFController] public class bookWcfController : JsonWCFController { [WCFMethod] public string SaveBook() { var data= ToObject(ParamJsonData); Book book = ToObject<Book>(ToArray(data)[0]); book.BindDb(oleDb, _container);//反序列化的對象,必須綁定數據庫操作對象
 book.save(); return "true"; } [WCFMethod] public string GetBooks() { BookDao bdao = NewDao<BookDao>(); DataTable dt = bdao.GetBooks("", 0); return base.ToJson(dt); } } }
View Code

 

      bookWcfController對象的功能方法其實與第二章中Web模式的bookController控制器。

      一樣的,只是接收參數數據與返回json數據的方式一點點的區別而已;再就是bookWcfController對象必須繼承框架中的JsonWCFController對象,還有配置類的自定義標簽[WCFController]和方法的標簽[WCFMethod],用來區別其他模式的控制器。

 

bookwcfclientController.cs文件

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EFWCoreLib.WCFHandler;
using Books.WinController.Iviewform;
using System.Data;
using Books.Entity;

namespace Books.Winform.WcfAction
{
    [EFWCoreLib.WinformFrame.Controller.Menu]//與系統菜單對應
    [EFWCoreLib.WinformFrame.Controller.View(DllName = "Books.Winform.dll", ViewTypeName = "Books.Winform.Viewform.frmBookManager", DefaultView = true)]
    public class bookwcfclientController : BaseWCFClientController
    {
        IfrmBook frmBook;
        public override void Init()
        {
            frmBook = (IfrmBook)DefaultView;
            //初始化加載書籍目錄
            GetBooks();
        }

        //獲取書籍目錄
        public void GetBooks()
        {
            //通過wcf服務調用bookWcfController控制器中的GetBooks方法
            Object retdata = InvokeWCFService("bookWcfController", "GetBooks");
            DataTable dt = ToDataTable(retdata);
            frmBook.loadbooks(dt);
        }

        //保存
        public void bookSave()
        {
            //通過wcf服務調用bookWcfController控制器中的SaveBook方法,並傳遞參數Book對象
            InvokeWCFService("bookWcfController", "SaveBook",frmBook.currBook);
            GetBooks();
        }
    }
}
View Code

 

      bookwcfclientController對象必須繼承BaseWCFClientController對象,且它是與界面層在同一項目中,其他的配置如控制器對應的界面,對應的菜單都與Winform模式winController1控制器一樣,也依賴於IfrmBook接口;其實bookwcfclientController具有的功能與Winform的控制器一樣,只去掉了操作邏輯層的功能與增加了訪問wcfController控制器的功能。

 

      講到這里不知道大家有沒有發現一點,就是從第二章的Web模式,第三章的Winform模式到本章WCF模式,項目的代碼文件都是共同使用的,比如第一章web模式中的實體和Dao,第二種Winform模式的界面文件和接口文件都是可以直接使用,並不需要任何一點點的改動,特別是Wcf模式完全可以兼容Winform模式的界面代碼;這就是EnterpriseFrameWork框架的特別之處,完全整合了這些模式在框架中;這樣在項目中我們可以根據具體情況可以很方便的調整開發模式,降低我們的開發成本。

 

      再講一下WCF模式的由來,Winform模式是一種非常簡單的開發模式,目前大部分應用軟件項目基本上都是這樣做的,部署簡單,服務器裝上數據庫,程序安裝在客戶機上。不管開發還是實施都是直接干脆之極,讓中小企業在成本與人才各方面考慮都是用的最多的模式。雖然Winform模式簡單,但同樣也有問題,首先在安全上直接暴露了服務器與數據庫操作,再就是不太適合復雜的網絡環境,維護升級都極為不方便等。所以隨着項目的規模越來越大,一些系統架構上的調整也是必要的。

      EnterpriseFrameWork框架中加入WCF開發模式就是基於這些方面的實際需求,所以怎樣才能最小代價的擴展成WCF模式,就是一直困擾我的問題,難道要把原有系統中的所有業務都重寫封裝成wcf服務?重寫的代價真的有點大,特別讓我接受不了的完全與框架的核心“簡潔”沖突了。也參考過其他公司的wcf框架,也是覺得可能把業務封裝成wcf服務太麻煩,所以干脆就是對數據庫的操作也就是DbHelper對象給用wcf服務封裝了,用wcf服務的方式操作數據庫,我就傻眼了。直到今年才找到如今這種方式,把Winform模式的控制器給拆分為wcfControllerwcfclientController,兩個控制器之間用wcf服務通訊。

      這也是一次讓我非常得意的改進,不知道大家用wcf做項目是一種什么樣的開發模式?

 

      3.最后我們看下圖,整理一下以上代碼文件的調用關系

      

 

EnterpriseFrameWork框架實例源代碼下載: 實例下載

 

回《【開源】EnterpriseFrameWork框架系列文章索引


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM