wcf的设计思想

拐爷 2009-10-31 09:08:46
我原来一直是搞winform的,最近学习一些wcf ,有几项不大明白,希望和大家讨论一下。
我们讲OO,指是的将数据和操作封装在一个类里,但是到了wcf,webservice,是不是相当于又把数据和操作分开了?
比如 ,我原来的设计 中,有如下 的定义


class A{
string Name{get;set;}
A(string a);
B getB(string b);
}
class B{
string Operation();
}


当我将这两个实现转为wcf时,我应该怎么分离?
设计两个服务 ?还是一个服务 ?
比如 ,我将A设计成服务时,有两个因素要考虑
一,A没有默认的构造函数,难到我需要加一个Load(string a)的操作?
二,如果A是服务的话,调用getB()后,返回的B的实例就没办法进行Operation的操作。
如果我把B设计成服务 ,那么A就很难处理。
请达人们指点,谢谢
...全文
298 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
soaringbird 2009-11-02
  • 打赏
  • 举报
回复
你向商家订购商品,不是直接对商品进行操作,而是商家提供服务,把商品给你送过来
vrhero 2009-11-01
  • 打赏
  • 举报
回复
WCF和你的“数据和操作”没有什么关系...WCF是通信框架,是解决通信问题的...

面向服务是建立在这个通信基础上而不是把通信当作服务...服务封装“数据和操作”而不是传递“数据和操作”...不要把服务当作类库...
拐爷 2009-11-01
  • 打赏
  • 举报
回复
今天又看了一些资料,我的理解是
wcf ,或者说webservice相当于把原来OO重新 分成 操作(即服务)和数据(即数据契约)两个部分
服务应该全部是由操作,以处理数据的操作为主。
xuyiazl 2009-11-01
  • 打赏
  • 举报
回复

//Contract
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IVideoServiceCallback))]
public interface IVideoService
{
[OperationContract(IsOneWay = true)]
void ProceedVideo(string videopath);
}


//Contract
public interface IVideoServiceCallback
{
[OperationContract]
void FinishProcedure();

}


//Service
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class VideoService:IVideoService
{

public void ProceedVideo(string videopath)
{

string test = videopath;
//callback
IVideoSearviceCallback guest = OperationContext.Current.GetCallbackChannel<IVideoServiceCallback>();

guest.FinishProcedure();

}



契约是命令行生成的
threenewbee 2009-11-01
  • 打赏
  • 举报
回复
先理解下wcf干什么的。
然后一些基本概念
比如接口、服务、终点(契约、绑定、地址三要素)、托管,等等。
qldsrx 2009-11-01
  • 打赏
  • 举报
回复
你把其它类里面的操作在你的继承接口的服务类中调用下,最终所有和通信有关的方法全部要包含在一个类中的,即使你把复杂的实现过程分离到其它类中也是一样。
拐爷 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qldsrx 的回复:]
WCF是要先设计接口,然后设计类,所以你多少个类都无所谓,但最终只能有一个继承你定义接口的类来实现服务。
[/Quote]
那其他的类怎么办?
准确的说,其他类里的操作怎么处理?
拐爷 2009-10-31
  • 打赏
  • 举报
回复
如果一个类即又数据又有操作的话,只能承载为服务的话我总觉得这不是一种好的设计
如果把服务和数据类分开的话应该是种倒退
我总觉得,如果wcf的入口服务能作为一个factory的话也许是最好方法
但是现在来看,这种方法是实现不了的
Thr21ough 2009-10-31
  • 打赏
  • 举报
回复
学习~
拐爷 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
A中B对象应该定义实体属性
string Name{get;set;}
B _b{get;set;}
WCF
[/Quote]
据我所知,如果这样得到B以后
得到的_b 好像不能执行操作Operation 了吧
这里b只能作为dataContract了
happy664618843 2009-10-31
  • 打赏
  • 举报
回复
楼上都分析不错 学习 关注
happy664618843 2009-10-31
  • 打赏
  • 举报
回复
lz 牛 没有搞过 学习
qldsrx 2009-10-31
  • 打赏
  • 举报
回复
WCF是要先设计接口,然后设计类,所以你多少个类都无所谓,但最终只能有一个继承你定义接口的类来实现服务。
Aslangg 2009-10-31
  • 打赏
  • 举报
回复
学习~
Error_Code 2009-10-31
  • 打赏
  • 举报
回复
WCF是面向服务的 面向服务与OO思想不冲突
你需要考虑的是这个服务向外部提供什么

A和B复杂不复杂 跟一个服务/2个服务 没有关系
你为一个系统定义2个服务的理由可以是 "这2个服务里面提供的方法和类完全是风马牛不相及的"
而不应该是 "里面有2个类关系比较复杂"
wuyq11 2009-10-31
  • 打赏
  • 举报
回复
A中B对象应该定义实体属性
string Name{get;set;}
B _b{get;set;}
WCF
拐爷 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lcl_data 的回复:]
为什么不把这2个类放到同一个服务里?
我也是wcf新手,欢迎拍砖
[/Quote]
A和B的实际关系可能要比这个复杂的多。
放到一个服务里是不实际的
十八道胡同 2009-10-31
  • 打赏
  • 举报
回复
为什么不把这2个类放到同一个服务里?
我也是wcf新手,欢迎拍砖

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧