我开始设计一个现在很小的wcf服务总线,但随着我们业务的增长将会增长,所以我关注一些令人头痛的问题,并且不想太多YAGNI。这是一个电子商务平台。问题是我对于放置东西的地方有太多的想法。我会给出一个场景来展示我所有的问题。设计WCF数据合同和操作
我们有一个电子商务网站,销售产品并最终交付它们。为此,我们有一个PlaceOrder服务,其中除了其他参数之外,还期望在此上下文(我们的网站下订单)中的Address对象由City,Street和ZipCode组成。
我们也做生意,只有使用我们的平台来销售产品的合作伙伴。他们负责交付。对于这种情况,我们有一个PlaceOrderForPartner服务,除其他对象外,它还需要一个Address对象。但是,在这种情况下(合作伙伴下订单),地址对象由与合作伙伴下订单相关的不同信息组成。
鉴于这种情况我有几个问题:
1)如何组织在我的解决方案命名空间和文件夹,这个DataContracts对象?我想过为每个上下文(合作伙伴,客户等)提供一个文件夹来保留服务和DataContracts。
所以我会
- MySolution.sln - Partner (folder) - PartnetService.svc - DataContracts (folder) - Address - Customer (folder) - Customer.svc - DataContracts (folder) - Address
使用这种方式我想有一个命名空间来放置我所有的上下文特定datacontracts。
2)服务设计怎么样?我是否应为每一个可能的地方,秩序和创造里面一个方法placeOrder在这样的服务:
Partner.svc/PlaceOrder
Customer.svc/PlaceOrder
或者创建拥有PlaceOrderForPartner订单服务和PlaceInternalOrder这样的:
Order.svc/PlaceOrderForPartner
Order.svc/PlaceOrderForCustomer
3)假设我挑了最后一个问题的第一选择,又该我是否对合作伙伴和客户的订单进行了操作?
4)我应该把DataContracts和Service定义放在同一个程序集中吗?每一个?所有与服务实施?
5)如何为操作命名输入和输出消息?我应该使用实体本身还是去使用OperationNameRequest和OperationNameResponse模板?
底线我的一个很好的问题是:如何“组织”涉及服务创建的数据合同和服务?
在此先感谢您的任何想法!
+1提到有帮助的dnrtv.com插曲。 – DaveB 2010-03-08 16:32:12