博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]WCF+WF双剑合璧构建微软的SOA系列(一):从一个简单的Demo开始
阅读量:5922 次
发布时间:2019-06-19

本文共 3859 字,大约阅读时间需要 12 分钟。

本文转自:

摘要:本系列文章将从实例出发,以实例结尾。由浅入深讲解在我们项目中如何使用WCF和WF。我们会发现使用WCF+WF将造就出其他技术无法达到的高度。最后我会将程序架到云端。......

  本系列文章将从实例出发,以实例结尾。由浅入深讲解在我们项目中如何使用WCF和WF。我们会发现使用WCF+WF将造就出其他技术无法达到的高度。最后我会将程序架到云端。

  微软.net的3W(WPF、WCF、WF)战略如下图。WCF负责通信,WPF负责界面展示,WF负责处理业务逻辑,如下图。

  本系列文章会主要用到上图中的所有技术,但是主要讲述如何使用WCF和WF来实现系统的中间层。看过亮剑的朋友知道李云龙常打胜仗,并不是他懂得很多很多的战争的理论知识,而是来自实战中的经验。所以本系列的文章以实战为核心,在实战中出理论,不循规蹈矩,我将把自己的实力拿出来,亮出自己的宝剑。

  本系列文章除了WCF和WF两种主要的技术,还会用到很多其他的技术,WCF和WF两种技术将一用到底,也会牵扯到其它的技术如WPF、Asp.net MVC、Asp.net Web Form,NH、EF以及一些常用的技巧。我将在实战中进行演练和对比,在实战中发现最适合的技术。

  好了,牛皮吹完了,进入今天的正题。本文是这个系列的第一篇文章,我想了想还是从一个简单的Demo开始。通过这个实例来说明在项目中如何使用WCF和WF。WCF是如何进行数据传递的,WF是如何处理业务逻辑的。而实例的业务场景是非常常见的入库单:录入入库材料,更新库存数量。

  系统架构

  首先,我将说说这个系统架构。可以分为4层。

  第一层:数据持久层:这个例子中我用EF实现的。
  第二层:业务逻辑层:很明显,这一层我要使用WF实现。
  第三层:服务层:很明显,这一层我要使用WCF实现。
  第四层:界面层:这里我使用Asp.net MVC。后续文章中,我将会陆续使用MVC、WebForm、WPF、SL四种界面进行展示。
  架构图如下:

  数据库结构图:只有两种表。EnterStock表示入库记录表,Stock表示库存表。

  数据持久层设计:前面提到了,我使用了EF4实现数据库的访问。EF的基本使用大家可以到网上查阅,这里我主要讲一下值得讲解的东西。由于使用EF生成Model,那么如何在MVC中进行DataAnnotation验证。看下面代码设计就明白了。以库存表为例:

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类中注入元数据属性。

  业务逻辑层设计: 用WF处理业务逻辑层是本系列文章的重点。我以入库操作为例。

  1、增加材料的功能函数设计

public sealed class InsertEnterStock : CodeActivity {
public InArgument
Stock { get; set; } protected override void Execute(CodeActivityContext context) {
InvoicingEntities entity = new InvoicingEntities(); entity.AddToEnterStock(Stock.Get(context)); entity.SaveChanges(); } }

  2、更新库存的功能函数设计

public sealed class UpdateStock : CodeActivity {
public InArgument
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、入库操作的业务函数设计

  分析:这里我将业务逻辑处理分成了两种形式。

  1、功能函数:任务单一、简单;以代码的方式展现。

  2、业务函数:业务复杂,有功能函数组合而成;以图形化的方式展现。

  这样设计,我业务逻辑处理就非常清晰了。

  服务层设计:在WCF中我要做的只是启动这些业务流程。

  契约:

[ServiceContract] public interface IInvoicingService {
[OperationContract] string EnterStock(EnterStock stock); [OperationContract] IEnumerable
GetStockList(); [OperationContract] IEnumerable
GetEnterStockList(); }

  实现:

public class InvoicingService : IInvoicingService {
public string EnterStock(EnterStock stock) {
var p = new Dictionary
(); p.Add("argEnterStock", stock); WorkflowInvoker.Invoke(new EnterStockBusiness(), p); return "ok"; } public IEnumerable
GetStockList() {
IDictionary
outArgument = WorkflowInvoker.Invoke(new GetStockList()); return outArgument["StockList"] as List
; } public IEnumerable
GetEnterStockList() {
IDictionary
outArgument = WorkflowInvoker.Invoke(new GetEnterStockList()); return outArgument["EnterStockList"] as List
; } }

  在服务层中,我没有任何的业务逻辑判断和处理,我完全封装到业务逻辑层了。

  界面层:界面层你可以使用如何你熟悉的技术去实现。这里我使用了Asp.net MVC。具体的实现我不细说了,就让我演示一下这个简单的Demo。

  1、简单的主页

  2、 库存中两种材料的库存数量都是:

  3、添加材料

  4、库存数量被更新

  5、入库记录列表

  总结:本文是WCF+WF双剑合璧系列的第一篇文章,带领大家实现了一个简单的Demo。这个Demo还是原型,存在很多不足。希望大家能提出你宝贵的建议,帮助我写好这个系列的文章。下篇文章中将会谈谈系统如何实现错误处理机制。

  代码:

 

转载地址:http://benvx.baihongyu.com/

你可能感兴趣的文章
iis6 zencart1.39 伪静态规则
查看>>
java使用jxl,poi解析excel文件
查看>>
vue的入门
查看>>
看看C# 6.0中那些语法糖都干了些什么(终结篇)
查看>>
结构体与字符串之间的转换
查看>>
隐藏桌面图标和任务栏
查看>>
linux系统下root用户和普通用户的时区不一致
查看>>
搭建redis集群时所遇问题及解决方法
查看>>
30天自制操作系统
查看>>
UITableView 编辑模式(增加-删除-移动---自定义左滑 title) xib cell
查看>>
Python学习之路7——深浅拷贝剖析
查看>>
java在线预览txt、word、ppt、execel,pdf代码
查看>>
非常棒的xss
查看>>
宁波竞赛题
查看>>
cocos2dx C++为Sprite添加触摸事件监听器
查看>>
mysql8.0修改密码无效的问题
查看>>
MySQL 日志管理
查看>>
sklearn-基础笔记
查看>>
SQL Server一些重要视图 1
查看>>
2017-7-17 代码生成器(转)
查看>>