锁定老帖子 主题:Domain Model 探索
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-01-04
frankensteinlin 写道 引用 设想一个新的用例:柜台取款。 你的取款方法又放在哪个对象里呢? 当然是银行柜台这个对象里面,当然是抽象意义上的柜台,取款,存款....... 当然还可以把接口抽象化,把取款机和柜台的共同部分的接口抽象出来,但决不是一个方法的接口如同取款Interface这一类的 呵呵,你怎么抽象化这个接口呢?如果不采用你所说的取款Interface? |
|
返回顶楼 | |
发表时间:2005-01-04
一些个人看法:
1.把需要追踪的时间的事务建成类的建模方法, 是建立领域模型最重要的手段。 2.usecase方式和领域模型是2种非常不同的角度, 不要搞混了。特别是把actor当作类名,把actor的 case当作方法名的建模方式,我觉得不足取。 |
|
返回顶楼 | |
发表时间:2005-01-04
我不得不承认可以有存款Interface();
这是我前面说的错误! 但是有一点在具体的类中很少有只有一种行为的类! 这里的接口继承其实是一种 has a 的关系 (可能是我对接口的语意理解有问题!) 不对业务不熟,做个假设:太外行的大家不要笑话: 我在A银行开了个账户希望得到的服务是:存款 取款 贷款 转账 ....高级客户有其他的特殊服务 如理财等 ... implement IAtmBank : I存款(); I取款(); I查询XX(); I柜台Bank :I存款(); I取款(); I查询XX(); I挂失(),I理财()... ItelephoneBank: I查询XX(); I挂失(),I理财()... IWebBank: I查询XX(); I挂失(),I理财()... 注意这里决不是一个一个act的实现,二是先完成对对象的描述再实现. |
|
返回顶楼 | |
发表时间:2005-01-04
呵呵,我们又靠近了一点点。
不过我没看懂你的代码 哪些是类?哪些是接口?哪些是方法? |
|
返回顶楼 | |
发表时间:2005-01-04
都是interface
冒号前面的是大的interface 后面是被继承的. 也就是说:后面一个方法是一个interface: |
|
返回顶楼 | |
发表时间:2005-01-04
引用 我不得不承认可以有存款Interface();
。 不好意思我要后悔了,还是不应该有存款Interface() 我觉得接口的基本含义还是 is a ! 吧每个方法作为一个接口美什么好处。 IperfectBank:存款(); 取款(); 查询XX(); 挂失(),理财()... 查询XX(); 存款(); IAtmBank : 存款(); 取款(); 查询XX(); I柜台Bank :存款(); 取款(); 查询XX(); 挂失(),理财()... ItelephoneBank: 查询XX(); 挂失(),理财()... IWebBank: 查询XX(); 挂失(),理财()... 有I的是接口,没有I的是方法。 引用
|
|
返回顶楼 | |
发表时间:2005-01-04
呵呵,我看你有点混乱了。
注意一下这段代码的味道吧,建议你重构。 然后看看最后的结果是什么。 |
|
返回顶楼 | |
发表时间:2005-01-04
我认为不需要重构了,提取出同名的方法作为Interface?不对!还是前面打飞机打人的呢个例子?那是对多态的滥用,要抵制这种诱惑。
I电话bank 查询; Iwebbank 查询 ?都是查询?他们的主动对象是不同的,他们可以继承abstractBack,覆盖掉一些方法: Ibank :存款(); 取款(); 查询XX(); 挂失(),理财()...所有的操作。 IwebBank Implenent Ibank //覆盖多余的方法 throw unsupportExcption ItelephoneBank implement Ibank: //覆盖多余的方法 throw unsupportExcption 接口缩小了?残疾人也是人啊,他也许不能走 不支持走的方法,或许走的方式不一样 |
|
返回顶楼 | |
发表时间:2005-01-04
frankensteinlin 写道 我认为不需要重构了,提取出同名的方法作为Interface?不对!还是前面打飞机打人的呢个例子?那是对多态的滥用,要抵制这种诱惑。
I电话bank 查询; Iwebbank 查询 ?都是查询?他们的主动对象是不同的,他们可以继承abstractBack,覆盖掉一些方法: 继承abstractBank吧 这样的话你的所有类是不是都可以继承abstractBank呢? |
|
返回顶楼 | |
发表时间:2005-01-04
不是,
只是银行接口这一部分[人和银行接口]剩下的再由银行拿着账户号码和密码去问账户. 你对柜台银行说这是我的存折 查询余额,我又密码 你再web应行上说这是我的用户名 密码 查询余额, 。。。。 银行帮你代理了其他服务 |
|
返回顶楼 | |