基于角色构建您的应用程序(有时称为角色)。换句话说,您不会根据“编辑”来构建控制器 - 您可以根据“编辑器”以及他们需要做什么来构建它。这听起来像是文字游戏,但实际上非常深刻,因为“工具”应该为使用它们的人服务。
例如,如果您有一个编辑器 - 然后您可以为该编辑器创建“用例” - 演员需要做什么以及他们正在处理什么资产。然后,您的方法会从这些用例中流出。这也大大简化了安全性。您不是在创建一个控制器,它为具有 5 个不同安全配置的 5 个不同用户提供服务。您只需拥有一个具有独特安全性的编辑器 - 一旦您确定他们已获得认证(登录) - 您无需一遍又一遍地检查它。
命名至关重要。这是易于理解的应用程序和令人困惑的应用程序之间的主要区别。允许自己更改和改进您的控制器、模型、方法名称,以便它们变得更加清晰。您应该能够查看您的模型文件夹,查看模型的名称 - 并准确了解应用程序的功能。
一个方法应该做一件事并做好。如果您的方法执行 3 种不同的操作,请将其拆分为 3 种方法。
随着模型变大,拆分模型,然后使用文件夹进行排列。哪一个更容易——在 1000 行代码或 300 行代码中找到方法?拆分模型会更快,因为这样您还可以更具体地命名模型。如果一件事很复杂,那么拥有一个只做一件事的模型是完全可以的。
如果您使用 CI,我个人建议您专注于构建模型与库。另一个建议是在控制器中构建 - 然后在完成时将代码推送到模型。所以就像联系表格一样 - 您在控制器中构建验证以将所有代码放在一起并且易于访问。你完成它,然后将验证代码推送到它自己的模型。
(你提到了产品/客户——codeigniter 非常适合电子商务)
=====
编辑
命名 - (摇头)是的,我还在学习。我要说的一件事——我认为在你的模型名称中加上“模型”这个词不是一个好习惯,比如
$this->user_model->getUser($id) ;
有一段时间我觉得这种模式真的很酷
$this->user_m->getUser($id) ;
我写了一篇关于它有多酷的帖子。然后我意识到这根本不酷并删除了帖子!想想看 - 你不会从你的控制器调用其他控制器。你只打电话给模特。那么为什么要到处重复“模型”这个词呢?
$this->user->getUser($id) ;
所以这就是我可能会如何开始。但现在我们想尝试让它可读,那么
$this->user->getBy($id) ;
"this user get by ID" -- 很清楚发生了什么。 你可以大声读出来,这很有意义。这是关键测试。这也意味着新人可以更快地查看您的代码并理解它。
martin 在大声朗读代码方面做了很多工作 - 起初这听起来很傻,但它对您的代码的长期可维护性有很大的影响。
我来回讨论的一件事-应该是“获取”还是“返回”-我通常使用获取,因为它简短而直接。
如果您不确定是否会有具有该 ID 的用户,我会使用 Find。如果你得到一组东西——比如搜索产品——并且可能没有任何结果,那么可能是 searchFor($item) 或类似的。
我会再次观看所有罗伯特·马丁的视频。并不断尝试不同的命名约定。大声说出来。另一个角度是您将不得不编写更少的 cmets。
好的,这是另一个准则 - 写下您的变量名称,以便它们有意义。不要缩写它们。
$first // NO why? first what??
$firstname or $first_name or $firstName // yes first name
这里有一些robert c martin关于命名的规则
小范围内的方法应具有长而精确的名称。 长范围内的方法应具有通用名称。
您不必阅读方法的主体即可知道它的作用。它的名称应该告诉您。
一个方法的行为越复杂,它的名字就越通用,并且应该从中提取更多的子方法。
请注意 - 在他的讲座等中,我从未听过罗伯特马丁说字母 php。他可能不认为这是一种真正的语言。但令人敬畏的是,他的示例主要是用 java 编写的,语法与在 codeigniter 中编写方法非常相似。 (所以不用担心你不是java程序员)
这里有一些对同一问题的有趣回答
https://softwareengineering.stackexchange.com/questions/119345/meaningful-concise-method-naming-guidelines