`
zkgale
  • 浏览: 100863 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

在工作中遇到的一个设计问题

阅读更多
关于一个设计的问题.
最近在做一个系统,与邮箱系统有点类似,但又不全是,大概需求是:

一个用户提出一份报告,然后将这份报告发给他的上级<不同位置的用户上级不同>查看处理,不管上级怎么处理,都必须有个回复,同时只要涉足过这份报告的用户都可以查看这份报告的情况,这份报告在不同的时间内会有不同的状态,
大概就是这样

根据这些需求,我们首先提出以下结构:
报告,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的原因).所以他觉得我那样做太臃肿了


我之所以搞出那样的处理方式,是想真正的将系统当成对象(希望能做成一个领域模型)一样的去处理,而不是为了实现功能而实现.

首先,希望大家能对我这样的处理方式进行批判,其次,也帮忙分析一下我与同事的分歧
在此先谢谢各位了
分享到:
评论
12 楼 CanCheung 2009-07-19  
如果成本允许的情况下,建议还是改成工作流。目前用户不知道自己要的就是工作流罢了。
11 楼 gavin.zheng 2009-05-25  
User   uid  username ....
   
UserReport   urid uid rid
  
Report rid own_user_id check_user_id  report_status

ReportService
getStatus();

UserService
writeReport();
getCheckOwnerReport();
getOwnerReport();
getChecking();
getChecked();
10 楼 kjj 2009-05-09  
用工作流,这是基本公能,要不你在己也造一个!!???
9 楼 zkgale 2009-04-22  
shuai45 写道
你看一下设计模式 就清楚了

能不能说具体点?
8 楼 shuai45 2009-04-22  
你看一下设计模式 就清楚了
7 楼 kjj 2009-04-22  
我看也就是工作流
6 楼 hahalizx 2009-04-22  
我们同事最近做了个工单系统,由用户填写工单,然后发布,然后工单就有类似你上述的几个状态,到最后处理完。中间加自己的业务逻辑。
用OSWorkflow做的工作流引擎,自己扩展的工作流适配器,完全可以满足你的要求呀,工作流就维护你那报告的状态,有啥不能用的呀?
5 楼 zkgale 2009-04-22  
hahalizx 写道
你用个工作流不就完了吗?


我们也想用工作流呀...
可是这个东西不全是工作流...
根本就不能用那东西...
  
4 楼 hahalizx 2009-04-22  
你用个工作流不就完了吗?
3 楼 zkgale 2009-04-22  
jansel 写道
个人观点:

至少先提取出报告的生命周期吧,然后把生命周期这里设计一下.

生命周期这里就包括了本身的状态,以及状态之间的迁移应该触发本身的信息变化(这里可以做的稍微可配置一下,也不用限于本身的信息,比如对外的触发也可以,类似发消息)

重点还是生命周期的设计,所以Stay,End这些就不需要实现了Box和Send接口了,而Send应该设计在状态迁移过程的一个操作.



在界面上会有某种操作的业务接口,
在service中封装这些业务的步骤,

关于报告的生命周期:
发送->处理->等待->完结
          |_______|

由于有这样的业务所以Stay,End是必须的,虽然不一定是BOX的形式
关于状态的迁移,都是在BOX中进行,

这里可以将BOX想成一个银行.
外面的人不用知道银行把我们的钱放在那里了,怎么了
只要我们把我们的一个标志(卡)及钱拿给前台MM,他就把钱存到我的名下,
而要去取的时候也是把我的标志给她,她就把属于我的钱给我,....
2 楼 tangshd 2009-04-22  
我说说我的想法:
我觉得不应该有BOX的存在, REPORT是一个实体, 把Services抽象出来,派生你说的senderService 和 operatorService等操作, 至于用户我也会抽象出来,现在目前来看可以派生2个 一个sender角色, 一个Operator角色

另:
楼主,你这些 <在编,草稿,发件,收件,待处理(事情没完),已处理(完了)>  状态都是需要持久化的吗?
1 楼 jansel 2009-04-22  
个人观点:

至少先提取出报告的生命周期吧,然后把生命周期这里设计一下.

生命周期这里就包括了本身的状态,以及状态之间的迁移应该触发本身的信息变化(这里可以做的稍微可配置一下,也不用限于本身的信息,比如对外的触发也可以,类似发消息)

重点还是生命周期的设计,所以Stay,End这些就不需要实现了Box和Send接口了,而Send应该设计在状态迁移过程的一个操作.

相关推荐

    关于大学生CAD课程设计遇到的问题与改善措施.pdf

    但是,随着科学技术的飞速发展,CAD软件的应用变得日益复杂,学生在学习过程中难免会遇到一系列的问题,这些问题可能会严重影响他们完成设计任务的效率和质量。 首先,CAD软件操作的熟练程度直接影响到学生在课程...

    自己总结的一个AD遇到的问题

    在这个场景中,用户遇到了在绘制原理图时的一个问题,这个问题涉及到元件的引脚定位和隐藏属性。以下是对这个问题的详细分析和解决方案。 首先,问题的核心在于用户在使用Altium Designer绘制原理图时,发现了一个...

    fpga设计中遇到的问题,大家看下

    - **“fpga设计中遇到的问题,大家看下”**:此标题表明作者可能在FPGA设计过程中遇到了一些具体问题,并希望通过社区的帮助来解决这些问题。 #### 描述解析: - **“大家好,这个关于FPGA中NIOS的设计规则,大家看...

    工作中遇到的问题总结(包含:前端,后台,运维,实施).docx

    工作中遇到的问题总结是一个包含前端、后台、运维和实施的全套流程实施中遇到的问题总结。以下是总结的详细知识点: 一、前端知识点: 1. 基础知识:HTML、CSS、JavaScript * HTML:结构化的标记语言,用于描述...

    PCB设计中所遇到的问题及解决方法研究.pdf

    在电子产品中,多路电源整流二极管的耐压保护是一个重要的设计考虑。尤其是在电源模块中,为了确保设备的稳定工作,需要对电源电压进行整流和隔离。例如,使用AC-DC模块电源时,当输入电压高达AC400V时,就需要选用...

    [原创]JWFD的设计过程中遇到的问题

    JWFD可能是一个自定义的工作流设计器或管理系统,作者在开发过程中遇到了一些技术难题。尽管描述为空,但从标签“源码”和“工具”可以推断,这个问题可能涉及到代码实现和工具选择。 1. **源码问题**: - **编码...

    MOS管驱动电路设计秘籍(工作原理+电路设计+问题总结)

    在N沟道MOS管中,当栅极相对于源极(Source)的电压升高时,会在沟道区域形成一个导电通道,允许电流从漏极(Drain)流向源极;反之,如果栅极电压低于源极,沟道则被关闭,电流无法流动。对于P沟道MOS管,这个过程...

    allegro学习学习过程中遇到 的 问题 详解

    在电子设计自动化(EDA)领域,...以上就是关于"allegro学习过程中遇到的问题详解"的主要内容,希望对初学者在理解DDR设计和使用Allegro时有所帮助。通过深入学习和实践,你将能够熟练掌握这一强大的PCB设计工具。

    Silverlight全开源工作流设计器

    "工作流说明.mht"文件可能是项目的详细文档,其中包含了关于如何使用和定制工作流设计器的信息,包括设计原则、操作步骤、示例代码以及可能遇到的问题和解决方案。MHT文件是一种单一文件格式,将HTML内容和相关资源...

    毕业设计工作检查记录表

    毕业设计是高等教育中一个重要的实践环节,旨在培养学生综合运用所学知识解决实际问题的能力,提升其独立思考和创新能力。在机械设计领域,毕业设计通常涉及机械零部件的设计、工艺流程的规划以及技术文档的编写。...

    参考资料-设计师每周工作报表.zip

    1. **工作报表概述**:设计师每周工作报表是一个详细的记录表,用于总结过去一周完成的设计任务,规划下一周的工作安排,并对工作中遇到的问题、挑战和解决方案进行记录。通过这种形式,设计师可以清晰地呈现自己的...

    BJTU程序设计分组训练实验三

    BJTU程序设计分组训练实验三是面向编程学习者的一个实践环节,主要目的是提升参与者的程序设计能力和团队协作技能。在这个实验中,学生们会被分成小组,共同完成一系列编程任务,涉及C++语言的使用,以及头文件(.h...

    电子设计中问题处理的经验

    有时可能需要回过头来重新考虑问题的原因,或者改变排查策略,避免在问题处理的过程中陷入僵局。 总之,电子设计中的问题处理需要经验的积累和技术的沉淀。在实际工作中,设计者应当培养出一套行之有效的问题分析和...

    C语言课程设计 教师工作量计算

    在本项目中,“C语言课程设计 教师工作量计算”是一个典型的编程实践,它旨在让学生运用C语言解决实际问题,即设计一个程序来计算教师的工作量。C语言是一种广泛应用的编程语言,以其高效、灵活和强大的底层控制能力...

    《感悟设计:电子设计的经验与哲理》.pdf

    作者在这本书中提倡的设计哲学是:作为一个电子工程师,应该有意识地在工作中留下尽可能多的信息,无论是对于自己还是团队中的其他成员。这样做不仅能够提高后续工作的效率和质量,减少bug的发生,还能为未来的设计...

    浅谈CMOS的正常工作电流下CMOS电路设计问题

    这次第一个出问题的是一个CMOS的与门(HE4000B系列的)。 我们的控制信号出自MCU(5V的系统),而与门的系统供电是12V的,因此两个电平不兼容,导致了MCU的高低电平统一被与门CMOS芯片识别成低电平。 我们在...

    第一个实现的jbpm的例子以及遇到的问题解决方案

    本示例主要讲解如何从零开始搭建一个基于jbpm的简单工作流应用,并分享在实践中遇到的问题及解决方法。 【描述】 在这个示例中,我们将一步步学习如何配置jbpm环境,创建并部署流程定义(BPMN 2.0 XML文件),以及...

    软件测试工程师面试过程中遇到的问题.pdf

    软件测试工程师面试过程中遇到的问题是一个非常重要的主题,对于软件测试工程师来说,面试是获取工作机会的关键一步。在面试过程中,面试官通常会问一些问题,以考察测试工程师的技术能力、经验和知识。本文档总结了...

    完美解决Indesign停止工作的问题

    8. **系统还原**:如果问题依然存在,可以考虑将电脑恢复到出现问题前的一个还原点,但这可能会丢失最近的数据和设置。 9. **联系技术支持**:如果以上方法都无效,那么建议直接联系Adobe客户服务,他们有专业的...

    为自己工作 - 世界顶级设计师成功法则.azw3

    本书总结了设计师们在经商过程中最常遇到的一系列问题,并提供了这些问题的解决方案。此外,本书还囊括了由设计师们所总结出的大量宝贵经验,从选择直接与客户打交道还是承包项目,到如何给公司起名字;从如何起草...

Global site tag (gtag.js) - Google Analytics