插件框架之任务列表插件

来源:互联网 发布:淘宝supreme正品吧 编辑:程序博客网 时间:2024/05/01 11:49
 

简单的任务列表也有存在的意义,意义就是多台电脑之间的同步,同步有多种方式,可以建立一个服务器,也可以将数据按照一定规则存储到某共有的存储器上。但我还希望这个插件具有向朋友发任务的一个功能,并且在任务完成后可以通知任务发出者。

 

例如,小A有个小东西需要小B来帮忙完成,而小B当前还在进行一项很紧急的任务,所以小B就告小A一会帮弄,小A就开始等啊等,最终下班也没见小B帮弄,小A也不好意思问小B事情做完没,有空了没?其实啊,这个时候小B早把这个事情给忘记了,这样的情况让人多么的痛苦啊。

 

但,至从有了我们这个任务列表插件,情况都不一样了,小A告小B说,我给你发了个请求任务,你有是将帮尽快弄下,小B问小A,事情紧急吗?什么时间要?小A说不急,今天下班前给我就好了,小B将将这条任务插入到了当前的任务列表中了,当小B下午完成当前手头任务一看,哦,小A的任务也要开始做了,这样就在下班前完成了小A的任务,然后发了个回执信息给小A,标记任务已经完成,还附带有其它的一些描述信息,下班前小A收到东西觉得很开心,心想这个插件真是不错。第二天上午,小A来到公司,打开昨天小B发的东西一看,感觉有点不对,所以和小B确认了下,发现确实小B有疏忽,这个时候小A又发了一个修正任务给小B,小B完成后将结果传递给了小A,过了几个月,后来发现那个东西还有点问题,所以小A就又找小B确认,但这个时候小B早已经忘记了什么东西了,这个时候,他们拉出了任务执行历史记录,才了解了当时的想法情况,很快问题就得到修正了,这个时候小A才意识到这个插件不是好用这么简单,而是太有用了,一定要推广。

 

好了,广告就写多么多吧,接下来就是动手干活了。

 

干活第一步,不是纸尿裤。首先,我们需要服务器吗?真的一定需要吗?

在确认是否需要服务器之前,我们确认下我们的使用者都处于什么样的网络环境下,会通过互联网的方式来发送任务吗?我想不会。使用者应该都子一个局域网内。

既然局域网内,可以有服务器,也可以不用服务器,点点之间互相连接就好了。也省的设置什么IP,ID号了。

关于是否需要服务器这个讨论,其实也很有借鉴意义,反应了一定的事实,某些同志一上来就开始挽起袖子大干特干了,但后来才发现,结果效果不好,做了很多无用功,做事之前,一定要将功能需求与非功能需求以及一些潜在需求或限制条件搞明白,也算三思而后行吧。

 

上边的讨论,让我们确立了插件互相连接的方式。

 

第二个问题,我们接下来该解决哪个问题?有些人也许觉得这个问题很可笑,怎么会有这样的疑惑,但我想还是有必要好好研究下的。如果没有探究过这个问题,那么我们解决问题的思路就是想到什么就考虑什么,根本没有系统性,这样的弊端就不讨论了。我常常思考问题的思路是从大到小,例如上一个问题我们讨论了系统与系统之间的关系,按照我的思路,接下来一定会想弄明白本插件与框架的处理关系,界面与数据的处理关系问题。当然,这个只是我个人的思路,有些人可能喜欢从小到大,这可能就像一个问题有很多解决办法一样的道理吧,但我觉得不管哪种方式,保持系统性是必要的。

 

处理插件与框架的关系,主要的纠结在于,我们的插件将以怎样的形式进行表现,是通过菜单进行激活显示?还是系统启动,该插件就自动被激活?说到底,这个还是需求需要进一步明确。

但基本的关系已经确定,这些更改对后期来说也没啥影响,所以当前就直接采用系统启动插件自动激活的方式。

 

界面与数据的关系,涉及几个问题,是界面主动询问数据是否更改,还是数据更改自动通知界面?任务逼近提醒是该界面完成,还是数据完成通知界面?

基于刚刚的问题,我们会将数据的管理设计为核心,底层通过一个线程来不断收发数据,并且内部会启动一个计时器进行任务逼近的处理,当数据更改,或任务被激发,都会发出一个消息,界面获取该消息,完成界面的刷新。

 

从上讨论中叶可以看出,我们可以将数据的处理与界面的显示拆分为两个互不影响的插件。或者我们走的更远一点,将网络收发与数据管理也分割为独立的插件。

 

现在我们整理下这三个插件之间的关系:

界面插件会接收到数据管理插件的消息,此时会触发界面的刷新;

界面插件会调用数据管理插件的接口进行数据的操作;

数据管理插件会调用网络插件的接口进行数据的发送;

数据管理插件会接收网络插件的消息,此时进行网络数据的修改组织,并发出数据更改消息;

网络插件在接收到网络消息后,通过注册的回调接口进行数据到来通知。

消息的发出流程都发生在主线程中,而消息的接收处理流程都发生在子线程中,所以界面的刷新最终需要界面消息进行处理。

 

那到目前,我们已经明确了系统之间的连接方式,插件的结构,插件之间的交互。

 

接下来,我们需要考虑什么?

如果仅仅只有一个开发人员,都无所谓了,插件结构,网络连接方式基本都确定了,完全可以从界面做到网络,也可以从网络做到界面,但我会从网络开始做,因为这样可以进行逐步的实际代码测试。

如果有多名开发人员,就需要严格定义插件之间交互的细节信息了。

 

那么,我就从网络连接方式,网络协议方面开始着手。这方面的内容,会在下次的文章中继续,今天先休息,有点累了。