热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

frameworks-设计一个这样的PHP框架怎么样?

框架设计目标:还是MVC结构;框架只包含路由、DB封装以及验证类(适合国情的手机号码、身份证、邮箱验证等);干一件事,只有一种方式;比如很多框架会提供很多种方法来从数据库取一条记录,这个框架只有一种...
框架设计目标:

  1. 还是MVC结构;

  2. 框架只包含路由、DB封装以及验证类(适合国情的手机号码、身份证、邮箱验证等);

  3. 干一件事,只有一种方式;比如很多框架会提供很多种方法来从数据库取一条记录,这个框架只有一种方法,比如只有find(Array $where)来取一条数据,没有其他封装方法,除非你用底层方法query;

  4. API风格统一,类、方法、变量命名格式统一;

  5. 框架基础类继承不超过3层,你可以很容易地看懂框架源代码;

  6. swiftmailer等国外成熟的类库直接通过composer加载即可使用,其他手动加载的类库放在library下面;

  7. 还有什么,大家继续补充。。。

框架目录结构:

├── composer.json
├── composer.lock
├── config //配置文件夹
│   └── main.php
├── controllers //控制层
│   └── UserController.php
├── library //第三方类库
│   └── weibo
├── models
│   ├── dao //数据访问对象层,封装SQL操作为相应的对象方法
│   │   └── User.php
│   └── data //业务控制层,封装业务逻辑,可以调用dao层、data层
│       └── User.php
├── public //web访问目录
│   └── index.php
├── vendor //composer仓库目录
└── views //视图层
    └── user
        └── info.php

回复内容:

框架设计目标:

  1. 还是MVC结构;

  2. 框架只包含路由、DB封装以及验证类(适合国情的手机号码、身份证、邮箱验证等);

  3. 干一件事,只有一种方式;比如很多框架会提供很多种方法来从数据库取一条记录,这个框架只有一种方法,比如只有find(Array $where)来取一条数据,没有其他封装方法,除非你用底层方法query;

  4. API风格统一,类、方法、变量命名格式统一;

  5. 框架基础类继承不超过3层,你可以很容易地看懂框架源代码;

  6. swiftmailer等国外成熟的类库直接通过composer加载即可使用,其他手动加载的类库放在library下面;

  7. 还有什么,大家继续补充。。。

框架目录结构:

├── composer.json
├── composer.lock
├── config //配置文件夹
│   └── main.php
├── controllers //控制层
│   └── UserController.php
├── library //第三方类库
│   └── weibo
├── models
│   ├── dao //数据访问对象层,封装SQL操作为相应的对象方法
│   │   └── User.php
│   └── data //业务控制层,封装业务逻辑,可以调用dao层、data层
│       └── User.php
├── public //web访问目录
│   └── index.php
├── vendor //composer仓库目录
└── views //视图层
    └── user
        └── info.php

这个嘛。已经有了,GitHub.com/dangcheng/scene-php

不错,思路清晰,化繁为简,很有实施性。

不过 看起来好像一个 CI 的升级版

我最近也在思考一个框架,既然这样我觉得我可以探讨一下,你思考是这样,但是写着写着你就发现可能不止三层了,我用了一段时间的Yii框架,觉得Yii框架包含的设计模式思想非常的好,开发起来整个逻辑很清晰。
我最近思考的一种方式就是后端只干后端的事情,纯数据处理,不进行渲染,只提供API,前端就只处理前端的事情,渲染完全靠前端Javascript来做。
我觉得这种应该是App的设计思想。

移动端和pc端的适配怎么做呢? 如pc端数据可能是10个字段,但是移动端只需要查3~4个字段, pc端一个页面30条数据或者更多,移动端一页10来条

推荐阅读
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 数据库锁的分类和应用
    本文介绍了数据库锁的分类和应用,包括并发控制中的读-读、写-写、读-写/写-读操作的问题,以及不同的锁类型和粒度分类。同时还介绍了死锁的产生和避免方法,并详细解释了MVCC的原理以及如何解决幻读的问题。最后,给出了一些使用数据库锁的实际场景和建议。 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • 我将SpringMVC升级到Spring3.2.5.我的一些剩余调用即使存在,也会返回无法识别的字段异常.这是错误.Resolvingexceptionfrom ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 我想将结果转换为ModelA数组,但没有找到方法。letquery"SELECTt1.columnA,t2.colum ... [详细]
author-avatar
johnnyLei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有