模型视图控制器 - 在 php 中构建自己的“小框架”


model view controller - Structuring own "small framework" in php

BACKGROUND/IDEA
我目前正在开发一个小框架,只是为了提高我的php知识。这个框架应该非常简单(最小化开销),并且在以后的扩展方面是灵活的。

不同的含义
由于阅读了更高级的教程,严肃的PHP开发人员的笔记,不同的类结构(单例,单例,依赖注入,JIT,...),oop,mvc,路由,缓存......还有更多,我发现很难过滤"正确的方式"(如果有的话),因为在我看来,每个人都说不同的东西。

许多人称赞那里的观点是"最好的",并说一切都是邪恶的。在我看来,没有对错之分。只有几种方法可以实现一个人的目标。

到目前为止我做了什么

  • 索引:INI 设置,定义常量,调用引导程序(不是 OOP)
  • 引导:自动加载器类、命名空间(按需包含文件)
  • 静态类: htmlManager, fileHandler, databaseManager, ...
  • 单例:无
  • 非静态类:控制器、模型、视图、路由等

我知道这是非常基本的,到目前为止我还没有做那么多,但我想先创建一个坚实的平台。

问题
在我想进一步介绍我的项目之前,我很想听听您对下面列出的内容的看法。

  • 您如何组织/构建小型甚至大型项目?
  • 您在代码的简单性、逻辑性、性能、可读性、可扩展性和可重用性方面有何经验?
  • 真的有没有"正确的编码方式",或者只是解释?
  • 有什么不应该使用的,因为它已经过时了?

我不想听到的

  • 忘记框架或 php
  • 不要
  • 这样做,不要在没有说出原因的情况下这样做

非常感谢我得到的每一个回复。

我目前正在开发一个小框架,只是为了提高我的php知识。这个框架应该非常简单(最小化开销),并且在以后的扩展方面是灵活的。

去吧。

由于阅读了更高级的教程,严肃的PHP开发人员的笔记,不同的类结构(单例,单例,依赖注入,JIT,...),oop,mvc,路由,缓存......还有更多,我发现很难过滤"正确的方式"(如果有的话),因为在我看来,每个人都说不同的东西。

那是因为有些人不明白为什么某些事情应该以某种方式解决,或者为什么有些事情是可怕的做法,但他们在某个框架上看到了一些东西,他们认为这是自切片面包以来最好的事情。

尽管意见可能不同,但如果这是您所追求的,您就不能与干净的代码和适当的 OOP 争论。在适当的OOP中,单例和static没有位置。此外,大多数人所说的MVC实际上是对模式的一些错误看法(主要是因为他们再次看到一些框架以某种方式做到这一点)。这并不总是坏事,但它不是MVC。

许多人称赞那里的观点是"最好的",并说一切都是邪恶的。在我看来,没有对错之分。只有几种方法可以实现一个人的目标。

在我看来,并非所有不是最好的东西都是可怕的。但有些东西只是不好的做法。定义某些模式的方式是使您的应用程序更易于维护、调试和测试。如果你要实现一些其他模式,那对我来说都很好,但你会失去其他模式的好处。

一般来说,我在进行OOP编程时使用的第一个经验法则是遵循SOLID原则。

静态类: htmlManager, fileHandler, databaseManager, ...

这些在适当的 OOP 中没有位置。其中,因为意志紧密耦合了类。这使得可维护性、可读性和可测试性成为一种痛苦。

单例:无

很好,因为它们只是一个花哨的global.

您如何组织/构建小型甚至大型项目?

将两个代码中的关注点分离为结构。其中一种模式可以帮助您:MVC、MVP、[MVVM](MODEL VIEW ViewModel)。就我个人而言,我最喜欢MVC模式,因为它与其他模式相比有一些不错的优势。

您在代码的简单性、逻辑性、性能、可读性、可扩展性和可重用性方面有何经验?

可读性和可遗嘱性是最重要的。紧随其后的 SOLID(也由第一点(重叠)处理)

  1. 真的有没有"正确的编码方式",或者只是解释?
  2. 有什么不应该使用的,因为它已经过时了?
  3. 性能

忘记框架或 php 不要这样做,不要在没有说出原因的情况下这样做

正如我之前所说:去吧。做吧,搞砸了!最好的学习方法是真正去做并犯可怕的错误。我认为我 1 年前制作的框架(尽管恕我直言仍然比那里的 90% 更好)是一个适当的废话™.

您如何组织/构建小型甚至大型项目?

许多PHP框架使用MVC结构。

您在简单性、逻辑、性能、 代码的可读性、可扩展性和可重用性?

除了严格遵循MVC之外,我建议遵循KISS和DRY等原则。我不会将性能视为高优先级的话题。您可以稍后熟悉缓存策略和良好的算法(一般主题,而不是 PHP)。

真的有没有"正确的编码方式",或者只是 解释?

有一些东西可以被认为是最佳实践,你会发现很多关于Zend或symfony等流行框架的提示。

有什么不应该使用的,因为它已经过时了?

你必须自己找出答案。您可以跳过编写数据库处理并使用ORM库,例如doctrine或propel。您可以为您的视图表示选择一个特殊的模板引擎,例如树枝或 smarty。

不要

这样做,不要在没有说出原因的情况下这样做

我认为所有长期的PHP程序员都至少启动过一次自己的框架,没有反对它的论据,特别是如果你想提高你的知识。