关于一个设计的问题.
最近在做一个系统,与邮箱系统有点类似,但又不全是,大概需求是:
一个用户提出一份报告,然后将这份报告发给他的上级<不同位置的用户上级不同>查看处理,不管上级怎么处理,都必须有个回复,同时只要涉足过这份报告的用户都可以查看这份报告的情况,这份报告在不同的时间内会有不同的状态,
大概就是这样
根据这些需求,我们首先提出以下结构:
报告,BOX<在编,草稿,发件,收件,待处理(事情没完),已处理(完了)>
class Report{
//用来标志这个报告在那个BOX内
int box;
}
/*******
* service,从某种意义上来说,算是一个转发的功能,但不全是,因为它们还有一个更重要的职责,封装步骤
******/
//发送管理
class senderService{
//包括新增,发送 等,发送及发送前对报告的操作,如:
//这样写有点奇怪,但是将USER当成一个所有者就好理解了,即,这个报告是他的
public void send(Report report, User user){
inbox.putin(report, user);
}
}
//处理管理
class operatorService{
//包括发送后对报告的所有操作
}
/**************************
* 以下都为Manager非service,由于上面对具体步骤进行了管理,这里对每个BOX的操作就很单一了,且相差不大
*************************/
interface Box{
public List<Report> list();
}
//
interface Sender{
//放入,report报告,owner所有者(我觉得这个概念很重要)即目的地
public void putin(Report report, User owner);
}
interface Operator{
//回复
public void putin(Report report, String writeBack)
}
//在编,处理没有发送前的报告
class Editbox implements Box,Sender{
}
//收件,处理收的
class Inbox implements Box,Sender{}
//待处理,所有处理后不能在现实实现的报告
class Staybox implements Box, Operator{}
//完成
class Endbox implements Box, Operator{}
//DAO,所有BOX对报告的修改都调用这个
class ReportDao{}
在每个BOX中我刚说了一个很重要的概念,所有者,即当前放入BOX的报告是那个的,
这样的话对所有BOX我只要对它说,我是那个,你把我的东西保存起来或把我的东西拿出来.
而在BOX内是直接修改Report的BOX属性,以给定它的所属.(我在这里没有将BOX属性,当成状态!!!而是看成它属于那个BOX)
以及其它信息的处理(现在不多),然后调用DAO持久化
以上是我的主要思想,其实,以前,我是把Sender,Operator接口继承BOX的,同事坚决反对后去了...
然后,我的同事却不想这样做,主要原因是,他觉得BOX太多了.而且每个BOX内的东西相对都很少,最重要的一点是每个BOX内都是改Request.box属性,他想直接在senderService,operatorService里面改这个属性...这样至少要少5个类,5个接口(Spring的原因).所以他觉得我那样做太臃肿了
我之所以搞出那样的处理方式,是想真正的将系统当成对象(希望能做成一个领域模型)一样的去处理,而不是为了实现功能而实现.
首先,希望大家能对我这样的处理方式进行批判,其次,也帮忙分析一下我与同事的分歧
在此先谢谢各位了