天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

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

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

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

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

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

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

architecture

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

db

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

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è)計(jì):用WF處理業(yè)務(wù)邏輯層是本系列文章的重點(diǎn)。我以入庫操作為例。

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

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è)計(jì)

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è)計(jì)

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

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

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

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

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

  契約:

[ServiceContract]
public interface IInvoicingService
{

[OperationContract]
string EnterStock(EnterStock stock);

[OperationContract]
IEnumerable<Stock> GetStockList();

[OperationContract]
IEnumerable<EnterStock> GetEnterStockList();

}

  實(shí)現(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ù)去實(shí)現(xiàn)。這里我使用了ASP.NET MVC。具體的實(shí)現(xiàn)我不細(xì)說了,就讓我演示一下這個(gè)簡(jiǎn)單的Demo。

  1、簡(jiǎn)單的主頁

1

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

2

  3、添加材料

3

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

4

  5、入庫記錄列表

5

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

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

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

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

主站蜘蛛池模板: 亚洲区视频 | 久久久久久久电影 | 久久婷婷国产五月综合色啪最新 | 久久热免费视频 | 日本又黄又爽又色又刺激的视频 | 69久久国产露脸精品国产 | 国产成人综合在线观看网站 | 欧美激情视频一区 | 亚洲欧美日韩国产另类电影 | 动漫美女性侵 | 国产毛片A级久久久不卡精品 | 一个人看的HD免费高清视频 | BL文库好大粗黑强强肉NP | 青青操久久 | 午夜免费体验30分 | 国产成+人+综合+亚洲不卡 | 亚洲偷偷自拍免费视频在线 | 俄罗斯粗大猛烈18P 俄罗斯雏妓的BBB孩交 | 日本A级作爱片金瓶双艳 | 色情内射少妇兽交 | 7723日本高清完整版在线观看 | 中文无码乱人伦中文视频播放 | 亚洲欧美成人综合 | 欲乱艳荡少寡妇全文免费 | 亚洲人成网站在线播放 | 97视频在线观看视频最新 | 抽插的日日液液H | 给个男人都懂的网址2019 | 男生扒开美女尿口戳戳 | 欧美亚洲国产免费高清视频 | 精品国产人妻国语 | YY6080A旧里番在线观看 | 久久电影院久久国产 | 国产激情精品久久久久久碰 | 久久精品美女久久 | 欧美日韩高清一区二区三区 | 日韩欧美高清一区 | 灌饱娇嫩H将军公主最新章节 | 超碰caoporen国产 | 玖玖爱这里只有精品视频 | 99精品欧美一区二区三区美图 |