中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

WCF+WF雙劍合璧構(gòu)建微軟的SOA系列(一):從一個簡單的Demo開始

  本系列文章將從實例出發(fā),以實例結(jié)尾。由淺入深講解在我們項目中如何使用WCF和WF。我們會發(fā)現(xiàn)使用WCF+WF將造就出其他技術(shù)無法達到的高度。最后我會將程序架到云端。

  微軟.NET的3W(WPF、WCF、WF)戰(zhàn)略如下圖。WCF負責(zé)通信,WPF負責(zé)界面展示,WF負責(zé)處理業(yè)務(wù)邏輯,如下圖。

untitled
  本系列文章會主要用到上圖中的所有技術(shù),但是主要講述如何使用WCF和WF來實現(xiàn)系統(tǒng)的中間層。看過亮劍的朋友知道李云龍常打勝仗,并不是他懂得很多很多的戰(zhàn)爭的理論知識,而是來自實戰(zhàn)中的經(jīng)驗。所以本系列的文章以實戰(zhàn)為核心,在實戰(zhàn)中出理論,不循規(guī)蹈矩,我將把自己的實力拿出來,亮出自己的寶劍。

  本系列文章除了WCF和WF兩種主要的技術(shù),還會用到很多其他的技術(shù),WCF和WF兩種技術(shù)將一用到底,也會牽扯到其它的技術(shù)如WPF、ASP.NET MVC、ASP.NET Web Form,NH、EF以及一些常用的技巧。我將在實戰(zhàn)中進行演練和對比,在實戰(zhàn)中發(fā)現(xiàn)最適合的技術(shù)。
  好了,牛皮吹完了,進入今天的正題。本文是這個系列的第一篇文章,我想了想還是從一個簡單的Demo開始。通過這個實例來說明在項目中如何使用WCF和WF。WCF是如何進行數(shù)據(jù)傳遞的,WF是如何處理業(yè)務(wù)邏輯的。而實例的業(yè)務(wù)場景是非常常見的入庫單:錄入入庫材料,更新庫存數(shù)量。

  系統(tǒng)架構(gòu)

  首先,我將說說這個系統(tǒng)架構(gòu)。可以分為4層。
  第一層:數(shù)據(jù)持久層:這個例子中我用EF實現(xiàn)的。
  第二層:業(yè)務(wù)邏輯層:很明顯,這一層我要使用WF實現(xiàn)。
  第三層:服務(wù)層:很明顯,這一層我要使用WCF實現(xiàn)。
  第四層:界面層:這里我使用ASP.NET MVC。后續(xù)文章中,我將會陸續(xù)使用MVC、WebForm、WPF、SL四種界面進行展示。
  架構(gòu)圖如下:

architecture

  數(shù)據(jù)庫結(jié)構(gòu)圖:只有兩種表。EnterStock表示入庫記錄表,Stock表示庫存表。

db

  數(shù)據(jù)持久層設(shè)計:前面提到了,我使用了EF4實現(xiàn)數(shù)據(jù)庫的訪問。EF的基本使用大家可以到網(wǎng)上查閱,這里我主要講一下值得講解的東西。由于使用EF生成Model,那么如何在MVC中進行DataAnnotation驗證。看下面代碼設(shè)計就明白了。以庫存表為例:

public partial class StockAutoMetadata
{

[DisplayName("Material ID")]
[Required]
public System.Guid MaterialID { get; set; }

[DisplayName("Material Name")]
[Required]
[StringLength(50)]
public string MaterialName { get; set; }

[DisplayName("Quantity")]
[Required]
public int Quantity { get; set; }
}
[MetadataType(typeof(StockAutoMetadata))]
public partial class Stock
{
}
//在partial類中注入元數(shù)據(jù)屬性。

  業(yè)務(wù)邏輯層設(shè)計:用WF處理業(yè)務(wù)邏輯層是本系列文章的重點。我以入庫操作為例。

  1、增加材料的功能函數(shù)設(shè)計

public sealed class InsertEnterStock : CodeActivity
{
public InArgument<EnterStock> Stock { get; set; }

protected override void Execute(CodeActivityContext context)
{
InvoicingEntities entity = new InvoicingEntities();
entity.AddToEnterStock(Stock.Get(context));
entity.SaveChanges();
}
}

  2、更新庫存的功能函數(shù)設(shè)計

public sealed class UpdateStock : CodeActivity
{
public InArgument<EnterStock> EnterStock { get; set; }

protected override void Execute(CodeActivityContext context)
{
InvoicingEntities entity = new InvoicingEntities();
var res = (from r in entity.Stock.ToList() where r.MaterialID == EnterStock.Get(context).MaterialNO select r).FirstOrDefault();
res.Quantity = res.Quantity + EnterStock.Get(context).Quantity;
entity.ApplyCurrentValues(res.EntityKey.EntitySetName, res);
entity.SaveChanges();
}
}

  3、入庫操作的業(yè)務(wù)函數(shù)設(shè)計

  分析:這里我將業(yè)務(wù)邏輯處理分成了兩種形式。

  1、功能函數(shù):任務(wù)單一、簡單;以代碼的方式展現(xiàn)。

  2、業(yè)務(wù)函數(shù):業(yè)務(wù)復(fù)雜,有功能函數(shù)組合而成;以圖形化的方式展現(xiàn)。

  這樣設(shè)計,我業(yè)務(wù)邏輯處理就非常清晰了。

  服務(wù)層設(shè)計:在WCF中我要做的只是啟動這些業(yè)務(wù)流程。

  契約:

[ServiceContract]
public interface IInvoicingService
{

[OperationContract]
string EnterStock(EnterStock stock);

[OperationContract]
IEnumerable<Stock> GetStockList();

[OperationContract]
IEnumerable<EnterStock> GetEnterStockList();

}

  實現(xiàn):

public class InvoicingService : IInvoicingService
{

public string EnterStock(EnterStock stock)
{
var p = new Dictionary<string, object> ();
p.Add("argEnterStock", stock);
WorkflowInvoker.Invoke(new EnterStockBusiness(), p);
return "ok";

}


public IEnumerable<Stock> GetStockList()
{
IDictionary<string, object> outArgument = WorkflowInvoker.Invoke(new GetStockList());
return outArgument["StockList"] as List<Stock>;
}


public IEnumerable<EnterStock> GetEnterStockList()
{
IDictionary<string, object> outArgument = WorkflowInvoker.Invoke(new GetEnterStockList());
return outArgument["EnterStockList"] as List<EnterStock>;
}
}

  在服務(wù)層中,我沒有任何的業(yè)務(wù)邏輯判斷和處理,我完全封裝到業(yè)務(wù)邏輯層了。

  界面層:界面層你可以使用如何你熟悉的技術(shù)去實現(xiàn)。這里我使用了ASP.NET MVC。具體的實現(xiàn)我不細說了,就讓我演示一下這個簡單的Demo。

  1、簡單的主頁

1

  2、 庫存中兩種材料的庫存數(shù)量都是:

2

  3、添加材料

3

  4、庫存數(shù)量被更新

4

  5、入庫記錄列表

5

  總結(jié):本文是WCF+WF雙劍合璧系列的第一篇文章,帶領(lǐng)大家實現(xiàn)了一個簡單的Demo。這個Demo還是原型,存在很多不足。希望大家能提出你寶貴的建議,幫助我寫好這個系列的文章。下篇文章中將會談?wù)勏到y(tǒng)如何實現(xiàn)錯誤處理機制。

  代碼:http://files.cnblogs.com/zhuqil/Invoicing.rar

NET技術(shù)WCF+WF雙劍合璧構(gòu)建微軟的SOA系列(一):從一個簡單的Demo開始,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费视频久久 | 国产精品久久久久久久久久尿 | 亚洲精品乱码久久久久久9色 | 日韩久久久久久久久久久 | 久久免费精品视频 | 欧美一级电影免费 | 隔壁老王国产在线精品 | 国产三区在线观看视频 | 91亚洲国产成人精品一区二三 | www.男人天堂.com | 影音先锋中文字幕在线观看 | 欧美一区二区三区视频在线播放 | 精品国产一级 | 特级黄一级播放 | 丁香综合| 伊人手机在线视频 | 久久里面有精品 | 午夜影院在线观看 | 国产www成人 | 91在线精品视频 | 精品麻豆剧传媒av国产九九九 | 99久久婷婷国产综合精品电影 | 亚洲视频免费在线看 | 伊人热久久| 国产极品粉嫩美女呻吟在线看人 | 全免费a级毛片免费看视频免 | 欧美 日韩 中文 | 亚洲欧美中文日韩在线v日本 | 国产高清久久久 | 国产精品久久欧美久久一区 | 成人av在线网站 | 久久日韩粉嫩一区二区三区 | 国产精品久久久久久久7电影 | 国产精品日本一区二区在线播放 | 91麻豆精品国产91久久久久久 | 成人午夜高清 | 日本不卡一区二区三区 | 亚洲日韩中文字幕一区 | 国产在线精品一区二区三区 | 欧美精品三区 | 亚洲一区二区三区在线 |