# 介绍

WARNING

由于作者精力有限,Dce框架将不再跟进支持PHP后续版本新特性,目前支持PHP8.1的枚举等特性。短期内会持续维护修复BUG等,但不保证会长期维护。作者后续可能会将Dce架构迁移至别的语言,可能是基于其他框架开发而非独立实现全部内容,以避免造重复的轮子。

Dce是一款开源免费的PHP开发框架,是一款全面向对象,面向Web与Server等网络编程的开发框架,内置分布式数据库中间件,支持分布式部署,微服务部署等。

Dce设计了一套RCR(Request-Controller-Response)通用架构,将Cli、Cgi与Http及长连接服务按这套通用模式进行了封装,让项目结构更清晰,方便开发人员快速上手开发。

作者开发Dce主用于自己项目,为了给PHP生态做一点小贡献所以开源,为了框架规范稳定、易于学习而编写开源了本文档。

框架会持续开源更新,目前处于初期阶段,可能会有一些作者未发现的小问题,且作者时间有限,可能无法及时修复。所以选择Dce时,请判断自己是否有能力解决这些问题,有则可以用来学习或商用,否则也欢迎学习体验,但不推荐商用。

Dce遵循木兰宽松许可证2,该协议让你对Dce框架代码及基于它开发的产品的可控度非常高,协议详情可点击这里 (opens new window)了解 。

# 特色

Dce从结构上设计了项目(Project)与节点(Node)的概念,项目用于归类不同的业务,如后台与前台等;节点用于定义不同的功能接口。有了这两个设计,可以非常方便的设计与定义接口、控制页面与权限等,让应用的代码与业务结构更清晰。

DCE支持多种开发模式,包括传统Cgi模式、Cli模式、及长驻内存Http等服务模式等。Dce通过RCR架构支持各种模式下的开发工作(如常驻内存Http服务,就是在内置的http项目下,通过接管Cli模式的请求,执行对应的控制器方法,在该方法中实例化并启动的SwooleHttp服务。同时在SwooleHttp服务内,又通过接管Http请求并路由到对应的节点,执行节点绑定的控制器方法,然后渲染并响应。)

强烈推荐你在Swoole (opens new window)环境使用Dce,利用Swoole的多进程协程模式,可以以较小的代价执行并行任务、将服务器性能利用到极致。Dce提供的连接池(Pool)、远程过程调用(Rpc)、 分库中间件(DbMiddleware)等,目前都用到了Swoole的特性,需要在常驻内存Swoole环境下使用。

另外Dce还提供了SessionManager,可以方便的获取与控制会话的状态信息,当用户状态发生改变时方便的更新其对应的会话状态。

当然还有很多其他特色功能,你可以通过后面的文档探索了解。

# 计划

Dce尚为个人项目,作者会将之应用于自己的项目,并且会将在实用中发现的问题予以修复并更新。作者也会处理用户提交的问题,但可能因为精力问题无法及时响应,用户若有能力可以自行解决,可以提交合并申请并到Dce主库。若作者发展顺利,会为Dce配置运维团队,届时将能为大家提供更有保障的服务。

# TODO

# 近期目标

  • 解决BUG
  • 完善文档
  • 完善综合工具
  • 框架实践(基于框架开发项目)

# 远期计划(可能会部分取消)

  • 集成封装Kafka
  • 集成封装Zookeeper,实现分布式锁
  • 设计与研发配置中心
  • 封装ElasticSearch支持Query与ActiveRecord
  • 扩展Redis库支持分库查询
  • 扩展Redis库支持Query与ActiveRecord

# 历史版本

  • Dce为Drunk Content Engine缩写,一开始是想做个功能灵活强大的CMS,可以通过后台配置就能生成接口与Html页面,解放后端开发人员。1.0版(未开源)基于TP3,做出来后应用到了两个项目中,但没有想象中实用,且因为缺少文档导致同事上手比较困难。

  • 2.0版(未开源)想去第三方化,并解决1.0的问题,所以自己写了除了数据库操作之外的所有东西,数据库相关较复杂,用了TP5的相关模块。设计过程中根据之前的经验,发现很难做到理想化,就抛弃了CMS那一套,纯粹做了一套MVC开发框架。

  • 因为PHP缺少生态,经过自己的学习了解,就想用PHP做分库那套东西,丰富下PHP生态,并且因Dce2缺少数据库那块,所以3.0(未开源)做了个 分库中间件,顺便也做了数据库查询器与对象关系模型,实现了框架代码全自主化。分库组件代码比例非常大,整个DCE有近一半脚本用于实现这块。

  • 在做中间件测试时发现Cli模式下用起来不够优雅,且之前的写法用的全蛇底式,看起来比较乱,所以准备小升下级到3.1,于是重写了全部DCE文件。为了解决Cli模式下能优雅编码的问题,抽象出了一套Cgi、Cli通用的模式,request-controller(service;model)-response。后面发现这套模式复用性很强,可以用于PHP版HttpServer,甚至Websocket与TcpServer,于是把这三个Server封到了里面,形成了最终的形态。同时因为这一批调的东西很多,是一个大版本,所以将版本升为了4.0。

# 关于文档

文档与框架目前仅作者自己维护,文档页面通过Vuepress构建,开源于Github(https://github.com/idrunk/dce-wiki (opens new window))。作者非科班出身,表达能力较弱,可能某些专业词汇表述不准,某些语句表达欠佳,如果你发现文档有问题,或者有自己的想法,可以点击下面的在Github上编辑此页编辑文档。