我开始设计一个 wcf 服务总线,它现在很小,但会随着我们业务的增长而增长,所以我担心一些日益严重的问题,并尽量不要 YAGNI 太多。这是一个电子商务平台。问题是我对把东西放在哪里犹豫了太多。我将给出一个场景来展示我所有的问题。
我们有一个电子商务网站,可以销售产品并最终交付产品。为此,我们有一个 PlaceOrder 服务,除其他参数外,它还需要一个由城市、街道和邮政编码组成的地址对象(我们的网站下订单)。
我们还与仅使用我们的平台销售产品的合作伙伴开展业务。他们负责送货。对于此场景,我们有一个 PlaceOrderForPartner 服务,除其他对象外,它还需要一个 Address 对象。但是,在这种情况下(合作伙伴下订单),Address 对象由仅与合作伙伴下的订单相关的不同信息组成。
鉴于这种情况,我有几个问题:
1) 如何在我的解决方案中的命名空间和文件夹中组织此 DataContracts 对象?我考虑过为每个上下文(合作伙伴、客户等)创建一个文件夹来保存服务和数据合同。
所以我会
- MySolution.sln
- Partner (folder)
- PartnetService.svc
- DataContracts (folder)
- Address
- Customer (folder)
- Customer.svc
- DataContracts (folder)
- Address
使用这种方式,我将拥有一个命名空间来放置所有特定于上下文的数据契约。
2)服务设计怎么样?我是否应该为每个可能下订单的服务创建一项服务,并在其中创建一个 PlaceOrder 方法,如下所示:
Partner.svc/PlaceOrder
客户.svc/PlaceOrder
或者使用 PlaceOrderForPartner 和 PlaceInternalOrder 创建订单服务,如下所示:
Order.svc/PlaceOrderForPartner
Order.svc/PlaceOrderForCustomer
3)假设我在上一个问题中选择了第一个选项,那么对于合作伙伴和客户共同的订单操作,我该怎么办?
4) 我应该将 DataContracts 和 Service 定义放在同一个程序集中吗?每人一份?一切都与服务实施有关吗?
5)如何命名操作的输入和输出消息?我应该使用实体本身还是使用OperationNameRequest 和OperationNameResponse 模板?
我的主要问题是:如何“组织”服务创建中涉及的数据契约和服务?
预先感谢您对此的任何想法!