一个小模型的分析

07-12-18 fety07

有人建了这样一个模型,如上图,之前有两个板块涉及这个问题

http://www.jdon.com/article/32896.html

http://www.jdon.com/jivejdon/thread/33010.html

为什么抽象出"CreditCard"对象,我是这么考虑的: 对"支付"这个职责,到底放哪里?放在"CreditCard"对象里,就很好解释.也很好反映购物的本质:"最终我们都是用卡来支付的".最后"Order"通过关联找到"CreditCard"进行支付,并处理一些其它事情,比如更新库存等.

    public class Customer {
        public Customer(string name, CreditCard creditCard){
            this.creditCard = creditCard;
            this.creditCard.Customer = this           
            this.name = name;
        }
        private CreditCard creditCard;

        public CreditCard CreditCard
        {
            return this.creditCard; 
        }
    }
<p>

    public class CreditCard {
        public CreditCard()
        {
            this.customer = null;
        }
        private Customer customer;
        public Customer Customer
        {
            get {  }
            set {  }
        }
 
        public void Charge(double amount)
        {
           //支付代码
        }
    }

从代码来看:"CreditCard"和"Customer"的双向关联中","CreditCard"可以更换"Customer".这样做岂不是很危险.反而觉得"Customer"应该提供更换"CreditCard"的接口.

[该贴被fety07于2007-12-18 11:24修改过]

         

banq
2007-12-18 14:53
订单和CreditCard属于两个不同领域,它们只有通过支付这个活动才发生关系,属于松散联系,不宜放在一个领域模块中,直接发生关系。

正如DDD这本书中,将货物运输Delivery和shipping和Billing分开一样,订单属于订货模块,而CreditCard属于Billing模块。

猜你喜欢