一个简单的例子:修改订单这个需求开始。
订单(Order)不具备EditOrder()的行为。一般的做法是放在服务层,例如OrderService或者OrderManager吧。根据用例驱动出不纯化的对外接口,然而,这些解接口里面的动能(方法)如何精准提炼出来? 如例子上的EditOrder是一个单纯的功能,返回什么?参数列表是什么?这些是如何确定的?
当然返回的参数其实不难确定,但一个参数列表,十分纠结,是弱类型吗?强类型吗?当我写成EditOrder(DateTime date)、EditOrder(string num,int price)等等这里功能,我就莫名烦恼,需求总是变化,极限化问题,这个service会变得异常臃肿,很多重复的东西,不得不写一次,即使是复制粘贴也显得苍白无力,那些Extract Method的私有方法,就更显得莫名其妙了。直接用一个Domain的参数列表,有觉得不太准确,究竟是我设计问题,还是有更好的办法解决?坐等各位高见。
“这些解接口里面的动能(方法)如何精准提炼出来?”问这句话的时候,先问下实际业务是怎么样的;业务规则决定了应该有些什么方法。具体到每个方法参数列表、这个得区别对待咯。像 EditOrder ,这个方法,如果想最大限度适应变化。就两个参数 EditOrder(int orderID,OrderEntity entity); 再在 EditOrder 方法里面处理哪些属性需要更新。