草庐IT

php 框架 - 构建你自己的 vs 预制的

coder 2023-12-30 原文

我正在构建一个当前使用 PHP 的应用程序,我正在尝试决定是使用一个预先存在的框架(如 codeigniter)还是构建我自己的框架。该应用程序需要真正具有可扩展性,我想完全控制它,这让我觉得我应该构建自己的应用程序,但与此同时,如果不需要,我不想重新发明轮子。

非常感谢任何建议。

谢谢

最佳答案

使用现有框架。

首先,从头开始创建框架需要投入大量时间和精力。该过程涉及大量试验和错误,因为您正在设计既需要简单又强大的东西。对于每个设计决策,您都必须问自己它将如何影响将在您的框架上构建的每个 future 项目。

您可能认为您可以做出每个设计决策并根据需求权衡它,就像您对任何其他软件项目所做的那样,但事实是您不知道自己的需求。您无法了解它们,因为框架应该能够在其领域内完成几乎所有事情(或者能够扩展以完成几乎所有事情)。 future 的项目 a 需要能够做 x。您的框架能否在不将其变成意大利面条代码的情况下允许这样做?如果项目 b 需要做 y 怎么办?如果项目c需要做z怎么办?

你预测到一切了吗?

现在对此的正常 react 是,如果某些东西不起作用,您将在未来进行更改。毕竟是软件。然而,框架不像一个简单的应用程序。它应该有一个接口(interface),一旦你将它暴露给将要使用它的软件,你就不能改变它。您可以扩展它,但不能更改它。所以现在你必须考虑弃用方法、api 版本和版本兼容性。除了正常的框架维护和新的应用程序编写之外,还有一系列全新的问题需要处理。

然后是文档。您需要 API、教程和示例代码。一旦你建立了自己的框架,你也必须处理这个问题。您可以忽略它,但我向您保证,最终您自己将需要找出您 6 个月前编写的那个方法的作用。它返回什么?如果发生特殊情况 x 怎么办?您是否将所有内容都写下来了,还是需要再次单步执行代码?而且我什至不会提到新团队成员开始使用自定义框架是多么容易,该框架的文档完全或至少大部分在您的脑海中。

您还必须承认,除非您与最优秀和最聪明的人合作(并且有相应的预算),否则您永远不会拥有现有框架引以为豪的大量库。您能比开源社区更快地分析、设计、编码、测试和调试吗?

最后你应该问问自己,你是否足够熟练地编写一个框架。您是否深入研究了现代 OO PHP5 框架的代码以找出它的特点?最重要的是,您知道为什么它以特定方式做事吗?请记住,您在设计中犯下的任何错误都可能在几个月后在您面前爆发,您最终可能会一次又一次地为此付出代价。

总而言之,我建议您使用现有框架;但是,这并不意味着您必须选择一个并喜欢它。花点时间花在开发新框架上的时间,然后花时间学习现有的框架。然后您可以扩展它以满足您的需要。还要记住,有些事情您可能无法做到。但我向您保证,有些事情您也无法使用自己的框架来完成,所以这并不重要。框架施加了一些限制。这是您为能够更快地开发应用程序而付出的代价。

关于php 框架 - 构建你自己的 vs 预制的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515522/

有关php 框架 - 构建你自己的 vs 预制的的更多相关文章

  1. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

    在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

  2. ruby - 在 Ruby 中构建长字符串的简洁方法 - 2

    在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo

  3. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  4. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  5. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  6. ruby-on-rails - 如何测试自己对 Ruby/ROR 的了解? - 2

    是否有self验证的问题列表。看着那个,我可以确定我知道。我应该复习一下。在学习的过程中,我列了一个这样的list,但它只包含我在某处听说过的项目。我需要一段时间才能找到新的东西。 最佳答案 以下是针对ruby​​和Rails的一些测试列表。证书名称:RubyonRails谁提供:oDeskIncorporation认证费用:免费网站:https://www.odesk.com/tests/985?pos=0证书名称:RubyonRails提供者:Techgig.com(TimesBusinessSolutionsLimited(T

  7. Ruby#index 方法 VS 二进制搜索 - 2

    给定一个元素和一个数组,Ruby#index方法返回元素在数组中的位置。我使用二进制搜索实现了我自己的索引方法,期望我的方法会优于内置方法。令我惊讶的是,内置的在实验中的运行速度大约是我的三倍。有Rubyist知道原因吗? 最佳答案 内置#indexisnotabinarysearch,这只是一个简单的迭代搜索。但是,它是用C而不是Ruby实现的,因此自然可以快几个数量级。 关于Ruby#index方法VS二进制搜索,我们在StackOverflow上找到一个类似的问题:

  8. ruby - sinatra 框架的 MVC 模式 - 2

    我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho

  9. ruby-on-rails - 如何构建复杂的 Rails 系统 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和

  10. ruby-on-rails - lovdbyless VS 社区引擎……哪个最好? - 2

    随着ruby​​被引入为新的编程救世主,我想知道是否有人基于易用性、运行所需的资源、可用性和易定制性而有偏好。两者有更好的吗? 最佳答案 好吧,任何基于Rails的社交网络应用程序的比较都应该包括insoshi(http://portal.insoshi.com/)。话虽这么说,这三个都非常相似,区别在于实现细节。Lovd和Insoshi都是完整的Rails应用程序;它旨在供您将它们用作入门工具包,并使用您自己的自定义功能对其进行扩展。另一方面,CommunityEngine是一个Rails插件。这意味着您可以更轻松地向现有Rail

随机推荐