多态, DDD如何体现
Account类有withdraw, deposit两个方法,是放在Account类的里面还是外面?
方案一:
Account代表我的账户,代表我的一个身份,那么当然是一个主动的对象。
Account取钱,存钱是里所当然的。withdraw, deposit两个方法应该是Account的方法。调用方法:
|
方案二:
Account就是户头,就是一个被动的金额数据记录。
User每次申请银行管理机构(出纳),AccountManager来操作这个Account。
调用方法:
|
如果只存在一种Account类型的情况下(比如只有银行柜台账户),那么编程上没有根本的区别。只是这个加钱、减钱的动作的位置不同 -- 是在Account里面做,还是在AccountManager里面做。
在有多个Account类型的情况下,那情况就大不一样了。
比如,有电子信用卡远程帐户 ECardAccount,有柜台存折账户PaperAccount。这两种账户的业务规则都是不同的。
比如,电子信用卡远程帐户的取钱,要收取一定比率的手续费,而柜台存折账户就不需要。
这个时候,两种划分方法的编程上的优劣,就体现出来了。
按照第一种方案,只要为相同的Account接口,实现两个不同的类,ECardAccount,PaperAccount,分别实现不同的withdraw,deposit就可以了。
第二种方法,就有些麻烦了。需要在AccountManager里面用一个 if else,或者switch来判断Account的类型,是ECard信用卡,还是Paper存折。
这两个方法都涉及到数据库的操作。
各位,如果是DDD,怎么处理?