当前位置: 首页 > 后端技术 > PHP

关于编辑系统的设计与分析

时间:2023-03-29 20:27:14 PHP

一个编辑系统,核心无非就是写作、审稿、发布这些基本流程。这部分处理好的话,一个剪辑剪辑系统应该差不多就准备好了。撰写、评论、发布。从编程的角度来看,它们实际上是一个一个的事件。评论是一个事件,发布是一个事件,取消发布是一个事件,推荐是一个事件。这些是改变文章状态的事件。首先是一个文章类,简化了,id表示唯一标识,status表示文章的状态。类文章模型{public$id;public$status;}其次,这个应该是事件驱动的,然后定义接口和抽象类接口IArticleEvent{publicfunctionaction(ArticleModel$articelModel);}abstractclassArticleEventimplementsIArticleEvent{//saveconstSaveArticle=1;//提交常量SubmitArticle=2;//首先评论constFirstReviewArticle=4;//二审constSecondReviewArticle=8;//发布constPublishArticle=16;//推荐constARecommendArticle=32;//B推荐constBRecommendArticle=64;公共$事件名称;公共$created_at;公共$创建者;公共函数__construct($event_name,$created_at,$created_by){$this->event_name=$event_name;=$created_at;$this->created_by=$created_by;}publicabstractfunctionaction(ArticleModel$articelModel);}一般最好用二级系统1,2,4,6,8...来表达状态。这个和1、2、3、4没什么区别,还有一个就是可以代表累加,1+2+4=7。这里的流程是,保存状态->提交状态->一审状态->二审状态->发布状态->(A推荐状态,B推荐状态)。这里的status可以很灵活,可以是1,2,4,8。也可以是status的加法,比如文章是A推荐status1+2+4+8+16+32=63.同时文章A推荐也是B推荐,是127,文章取消了A的推荐,是95,只有发布状态是31,最后就是实现每个事件。这是三个简单的事件。提交、推荐和取消推荐echo"文章状态提交成功".$status;}}classARecommendArticleextendsArticleEvent{publicfunctionaction(ArticleModel$articelModel){$status=$articelModel->status+ArticleEvent::ARecommendArticle;echo"A推荐文章进入B推荐(可以同时提交文章和A推荐)".$status;}}classCancelARecommendArticleextendsArticleEvent{publicfunctionaction(ArticleModel$articelModel){$status=$articelModel->status-ArticleEvent::ARecommendArticle;echo"取消ARecommendArticle成功返回提交状态".$status;}}目前的过程比较简单,就是简单的加减法。也可以在这里处理sql语句之类的。这是事件驱动的,符合单一原则和开闭原则。代码会很灵活,扩展很方便,流程控制代码和事件代码分离。例如实现文章中的通用日志记录方法函数log()。在特定类下,覆盖此日志方法。用于记录更详细的日志信息。再比如在流程中添加第三次审核,添加一个事件ThirdArticleReviewEvent,在流程控制代码中添加这个类。取消A推荐的事件,不仅要取消A的推荐,还要取消A的发布。然后添加一个新事件,或者只修改单个事件。再次更改上述要求。A部门可以同时取消推荐和发布,B部门只能取消推荐。然后添加一个新事件。这种基本可以让他自虐自虐,我满满的诚意。