在学习WCF之前,就见到过另一种编程思想,叫做面向服务开发,哈哈,当时不甚了了。
前面提到,我之前一直用Delphi开发的,所以是学习的Delphi面向对象开发,记得足足有3个多月,写了22万行代码,才算是明白面向对象开发。对我以后的工作和学习打下了结实的基础。
很长时间,我都是用WCF开发服务,用Delphi开发客户端,其中数据通过WCF交互的部分没有用到面向对象开发的思想,一直到转到C#开发WinForm。
用C#开发了一些客户端期间,学习了一本书《Expret C#2005 Business Objects》,虽然最后也没有用轨道CSLA架构,可是对我的启发很大。
一直到自己摸索到的开发风格。一律用类作为WCF数据交互的参数基础。
略写如下。
1. 先对一个系统要操作的数据进行规划,类化,即相关的数据组成一个类,
2. 对主要数据集部分做成段或类,生成类的泛型列表属性
3. 当然还要完善这个类的其他成员,方法等,才能写成一个有用的类
4. 把类作为ref读写参数,或作为返回值,返回处理后的她自己
例如:
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using myHomeLibrary;//这里写了许多基础的东西,写了一些通用的属性,成员等,算是一个基础类
namespace BufferLibrary
{
public class BufLineItem ///主要数据集部分
{
private string _line = "N/A";
private string _onLine = "N/A";
private string _onLineFeederList = "N/A";
private string _linkModel = "N/A";
private string _linkMO = "N/A";
private string _typeF = "F";
public BufLineItem ()
{
//
}
public string LineName
{
get
{
return _line;
}
set
{
if (_line == value)
return;
_line = value;
}
}
public string OnLineModel
{
get
{
return _onLineModel;
}
set
{
if (_onLineSFCModel == value)
return;
_onLineSFCModel = value;
}
}
public string OnLineFeederList
{
get
{
return _onLineFeederList;
}
set
{
if (_onLineFeederList == value)
return;
_onLineFeederList = value;
}
}
public string LinkSFCModel
{
get
{
return _linkSFCModel;
}
set
{
if (_linkSFCModel == value)
return;
_linkSFCModel = value;
}
}
public string LinkMO
{
get
{
return _linkMO;
}
set
{
if (_linkMO == value)
return;
_linkMO = value;
}
}
/// <summary>
/// TypeF的標示
/// </summary>
public string TypeF
{
get
{
return _typeF;
}
set
{
if (_typeF == value)
return;
_typeF = value;
}
}
}
public class BufLineItemS : CHome
{
//
private List<BufLineItem> _lineItemS = new List<BufLineItem>();//泛型列表属性成员
#region 构造函数,析构函数
public CBufLineItemS()
{
ProjectName = "LineItemS";
ProjectType = 0;
}
#endregion
#region 自定義屬性
public List<BufLineItem> LineItemS//泛型列表属性
{
get
{
return _lineItemS;
}
set
{
if (_lineItemS == value)
return;
_lineItemS = value;
}
}
#endregion
#region 自定義方法
public BufLineItem ItemOfLine(string _tmpLine)
{
BufLineItem _tmpItem = new BufLineItem();
//
foreach( BufLineItem _item in _lineItemS )
{
if (_item.LineName == _tmpLine)
{
_tmpItem = _item;
break;
}
}
//
return _tmpItem;
}
#endregion
//
}
还有一个把LineItemS转换成DataTable的方法,就不写详细代码啦,以便于客户端DataGrid或作为数据集操作处理
}
WCF服务端是这么写的
[OperationContract]
bool ExecuteBufLine(ref CBufLineItemS _tmpBufLineItemS, string ftype);
public bool ExecuteBufLine(ref CBufLineItemS _tmpBufLineItemS, string ftype)
{
bool _boRes = false;
try
{
//这里是作为数据库处理,得到数据,就不详细谢啦
_tmpBufLineItemS.LineItemS.Clear();//这里清空原有数据
BufLineItem _tmpBufLineItem = new BufLineItem() { LineName = _tmpLine, LinkMO = _tmpWO, LinkModel = _tmpLinkModel, OnLineSFCModel = _tmpOnLineModel, OnLineFeederList = _tmpOnLineBom, Type34F = _tmp34f };//这里是根据数据集处理结果生成新的
_tmpBufLineItemS.LineItemS.Add(_tmpBufLineItem);//添加数据集
}
_boRes = true;
}
catch
{
_boRes = false;
}
return _boRes;
}
基本操作就是上述的方式,实际工作中,当然比非面向对象的方式快捷多啦。具体代码部分以后再补上。