关于一个设计的问题.
最近在做一个系统,与邮箱系统有点类似,但又不全是,大概需求是:
一个用户提出一份报告,然后将这份报告发给他的上级<不同位置的用户上级不同>查看处理,不管上级怎么处理,都必须有个回复,同时只要涉足过这份报告的用户都可以查看这份报告的情况,这份报告在不同的时间内会有不同的状态,
大概就是这样
根据这些需求,我们首先提出以下结构:
报告,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的原因).所以他觉得我那样做太臃肿了
我之所以搞出那样的处理方式,是想真正的将系统当成对象(希望能做成一个领域模型)一样的去处理,而不是为了实现功能而实现.
首先,希望大家能对我这样的处理方式进行批判,其次,也帮忙分析一下我与同事的分歧
在此先谢谢各位了
分享到:
相关推荐
但是,随着科学技术的飞速发展,CAD软件的应用变得日益复杂,学生在学习过程中难免会遇到一系列的问题,这些问题可能会严重影响他们完成设计任务的效率和质量。 首先,CAD软件操作的熟练程度直接影响到学生在课程...
在这个场景中,用户遇到了在绘制原理图时的一个问题,这个问题涉及到元件的引脚定位和隐藏属性。以下是对这个问题的详细分析和解决方案。 首先,问题的核心在于用户在使用Altium Designer绘制原理图时,发现了一个...
工作中遇到的问题总结是一个包含前端、后台、运维和实施的全套流程实施中遇到的问题总结。以下是总结的详细知识点: 一、前端知识点: 1. 基础知识:HTML、CSS、JavaScript * HTML:结构化的标记语言,用于描述...
在电子产品中,多路电源整流二极管的耐压保护是一个重要的设计考虑。尤其是在电源模块中,为了确保设备的稳定工作,需要对电源电压进行整流和隔离。例如,使用AC-DC模块电源时,当输入电压高达AC400V时,就需要选用...
JWFD可能是一个自定义的工作流设计器或管理系统,作者在开发过程中遇到了一些技术难题。尽管描述为空,但从标签“源码”和“工具”可以推断,这个问题可能涉及到代码实现和工具选择。 1. **源码问题**: - **编码...
在N沟道MOS管中,当栅极相对于源极(Source)的电压升高时,会在沟道区域形成一个导电通道,允许电流从漏极(Drain)流向源极;反之,如果栅极电压低于源极,沟道则被关闭,电流无法流动。对于P沟道MOS管,这个过程...
在电子设计自动化(EDA)领域,...以上就是关于"allegro学习过程中遇到的问题详解"的主要内容,希望对初学者在理解DDR设计和使用Allegro时有所帮助。通过深入学习和实践,你将能够熟练掌握这一强大的PCB设计工具。
"工作流说明.mht"文件可能是项目的详细文档,其中包含了关于如何使用和定制工作流设计器的信息,包括设计原则、操作步骤、示例代码以及可能遇到的问题和解决方案。MHT文件是一种单一文件格式,将HTML内容和相关资源...
毕业设计是高等教育中一个重要的实践环节,旨在培养学生综合运用所学知识解决实际问题的能力,提升其独立思考和创新能力。在机械设计领域,毕业设计通常涉及机械零部件的设计、工艺流程的规划以及技术文档的编写。...
1. **工作报表概述**:设计师每周工作报表是一个详细的记录表,用于总结过去一周完成的设计任务,规划下一周的工作安排,并对工作中遇到的问题、挑战和解决方案进行记录。通过这种形式,设计师可以清晰地呈现自己的...
有时可能需要回过头来重新考虑问题的原因,或者改变排查策略,避免在问题处理的过程中陷入僵局。 总之,电子设计中的问题处理需要经验的积累和技术的沉淀。在实际工作中,设计者应当培养出一套行之有效的问题分析和...
在本项目中,“C语言课程设计 教师工作量计算”是一个典型的编程实践,它旨在让学生运用C语言解决实际问题,即设计一个程序来计算教师的工作量。C语言是一种广泛应用的编程语言,以其高效、灵活和强大的底层控制能力...
作者在这本书中提倡的设计哲学是:作为一个电子工程师,应该有意识地在工作中留下尽可能多的信息,无论是对于自己还是团队中的其他成员。这样做不仅能够提高后续工作的效率和质量,减少bug的发生,还能为未来的设计...
这次第一个出问题的是一个CMOS的与门(HE4000B系列的)。 我们的控制信号出自MCU(5V的系统),而与门的系统供电是12V的,因此两个电平不兼容,导致了MCU的高低电平统一被与门CMOS芯片识别成低电平。 我们在...
标题中的“数字钟设计报告”指的是一个项目,其目标是设计一个能够显示时、分、秒的电子设备,以24小时为一个周期运行。这个设计不仅要求有基本的时间显示功能,还应具备校时和整点报时的特性。描述中提到,该数字钟...
本示例主要讲解如何从零开始搭建一个基于jbpm的简单工作流应用,并分享在实践中遇到的问题及解决方法。 【描述】 在这个示例中,我们将一步步学习如何配置jbpm环境,创建并部署流程定义(BPMN 2.0 XML文件),以及...
8. **系统还原**:如果问题依然存在,可以考虑将电脑恢复到出现问题前的一个还原点,但这可能会丢失最近的数据和设置。 9. **联系技术支持**:如果以上方法都无效,那么建议直接联系Adobe客户服务,他们有专业的...
软件测试工程师面试过程中遇到的问题是一个非常重要的主题,对于软件测试工程师来说,面试是获取工作机会的关键一步。在面试过程中,面试官通常会问一些问题,以考察测试工程师的技术能力、经验和知识。本文档总结了...
在课程设计的每一个阶段中,无论是取得的成就还是遇到的挑战,都将成为我人生旅程中宝贵的财富。通过这次课程设计的实践,我更加坚信,不论是在学习上还是在将来的工作中,我都将更加自信地面对各种挑战。
本书总结了设计师们在经商过程中最常遇到的一系列问题,并提供了这些问题的解决方案。此外,本书还囊括了由设计师们所总结出的大量宝贵经验,从选择直接与客户打交道还是承包项目,到如何给公司起名字;从如何起草...