我正在创建一个新程序。它是以我以前从未创造过的方式创建的。该计划基本上包括以下内容:
我在此设置中遇到的问题如下:
1.我无法为我的数据库类创建单例,因为使用ajax我被迫在每个ExampleAction文件中创建一个新的数据库实例。这是正常行为还是应该可行,这可能是我的代码中的一些内容?如果它应该是可能的,并且它在我的代码中,我会稍后发布。
如果我不够清楚,这就是我尝试过的: - 我将index.html重命名为index.php(ofcourse)。 - 在此文件的顶部包含我的数据库单例。 - 对ExampleAction.php进行了ajax调用。 - ExampleAction.php无权访问数据库类,我必须再次包含它并创建一个新实例。
2.当我进行Ajax调用时,我通过POST发送参数。 ExampleAction的总体布局如下:
$actionInstance = new ExampleAction();
class ExampleAction {
public __construct() {
this.GetAction();
}
private GetAction() {
$action = $_POST['action'];
switch ($action) {
case "Login":
this.Login();
break;
}
//Login function, etc. here
}
}
当然我的真实代码包含清理等等,switch语句更长,它包含更多功能
我不喜欢这两件事。我不喜欢每次调用文件时都必须实例化对象,但我想这不会有帮助。
第二件事是,如果我有很多功能,我的开关会变得很大。
所有这些问题让我觉得我一切都错了。
TL; DR: 我正在寻找设置程序的最佳方法,例如我正在制作的程序。我觉得我的代码运行速度较慢(因为ajax调用量越来越大),并且一分钟内难以维护(因为switch语句不断增加。
答案 0 :(得分:2)
您必须为每个AJAX调用实例化一个新对象的原因是因为AJAX调用是从客户端向服务器发出的新请求。被调用的脚本没有在你的程序中运行,任何设置都必须在AJAX调用脚本时完成。
解决此问题的最佳方法是使用利用MVC的框架,例如codeigniter或Zend Framework。简而言之,如果使用正确使用MVC框架,则需要为每个AJAX调用实例化对象,因为这是由控制器处理的,并且您将能够丢失switch语句,因为每个AJAX调用都可以是一个唯一的URI一个处理所有这些不同调用的控制器。
编辑:回复评论 不幸的是,我对Zend Framework没有任何经验,但我确信这个前提与Codeigniter几乎相同。因此,在Codeigniter中,您将拥有一个扩展主控制器的AJAX控制器,因此可以访问数据库以及主控制器中设置的所有其他内容。
在AJAX控制器中,您将拥有不同的方法来处理所有不同的AJAX调用。
//CI_Controller is codeigniter's base Controller
class AjaxController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->output->set_content_type('application/json');
// Can make calls to anything a normal controller can do
}
public function doSomething() {
// You have access to the database because you are extending
// and calling the parent constructor
// $this->db->query();
}
public function doSomethingElse() {
...
}
要调用这些AJAX函数,您的URI将为http://mysite.com/Ajax/doSomethig或http://mysite.com/Ajax/doSomethingElse
正如我之前所指出的,AJAX调用是从客户端向服务器发出的全新请求。当用户请求页面时,您的PHP代码在服务器上运行,输出发送到客户端。任何javascript都在用户浏览器中运行。如果您的javascript进行了AJAX调用,这是对您的服务器的新请求,并且在您的原始请求的PHP完成后发生。
答案 1 :(得分:1)
很难简单地为您提供最好的方式"为你的程序。
但我建议您深入了解MVC模式并了解它的结构。之后,您可以尝试在自己的代码中实现类似的方法。
这是关于MVC的基本解释,但是请花点时间去谷歌并阅读更多内容,然后再阅读这段文字:
以外行人的名义定义MVC
记住你在技术上很有头脑 接近代码。 MVC对你来说就像白天一样清晰,但却对此表示赞同 商业'模型,视图,控制器'可以给他们的印象 你患有某种形式的Tourette综合症。 MVC不代表 即使在你定义它们之后,甚至对业务也很重要 码。让企业了解为什么这是答案和 最重要的是,它可能比我预期的任务更多 经验。甚至一些开发人员也很难理解 这有时候。
让听众了解MVC是什么以及为什么它适用于我 已经尝试过将MVC应用到不同的行业 听众有更多的参与。一个有效的例子 对于我来说,过去与物业甚至是物业相比 车辆。大多数人与建筑商,木匠, 水管工,电工或看过洪水的财产节目 电视。这种体验是一个很好的平台,可以用来解释原因 像MVC这样的分离工作。我知道你可能在想 不会起作用,因为它与软件不一样,但请记住你 不试图培养业务成为开发人员或拥有 深入了解MVC,简单地向他们解释分离 在生产中是必需的,这就是MVC结构所提供的。
举一个如何描述这个的例子我非常简短 解释了分离在财产中的作用。请记住这是 专注于使用不完全开发的系统 不同的解释角度。
查看强>
MVC中的视图是表示层。这就是最终用户 一个产品将看到并与之互动。一个系统可以有多个 从命令行输出到的所有不同类型的视图 呈现HTML。大多数情况下,视图不包含业务逻辑 清晰的设计。界面适合用途,是的领域 相互作用。因此,您可以简单地为消费者输出HTML 与企业进行交互或输出SOAP / XML以进行交互。都 使用系统背后的相同业务逻辑,也称为 模型和控制器。
在财产世界中,您可以将视图视为内部 居民的财产或财产的外层 与。。。相互作用。内部可以根据目的进行定制 物业可以有许多不同类型的租户。例如a 特定设计的财产可能包含住宅。 相同的内部空间可以很容易地用作办公空间,在那里 虽然在同一财产中有不同的目的。然而 财产结构是一样的。因此在哪个环境中 用户互动不会干扰建筑物的结构。
<强>控制器强>
控制器是魔术发生的地方并定义了业务 应用逻辑。这可能是用户发送回复的地方 从视图来看,这个响应用于处理内部 请求的工作方式并将响应处理回用户。 在用户请求购买书籍的情况下进行典型响应。 控制器具有用户ID,付款详细信息,送货地址和 项目选择。然后通过业务处理这些元素 完成购买的逻辑。数据通过系统传递 进入模型层并最终在整个请求满足之后 业务定义,订单构建和用户 收到他们的物品。
如果我们将它与属性进行比较,我们可以比较a的顺序 在线预订打开电灯开关。租客会轻弹一下 切换到就像订购一本书一样。交换机本身就是一个 视图层中的元素,它将请求发送到控制器 就像点击网站上的结帐按钮一样。业务逻辑 在这种情况下,电工安装并嵌入其中 财产设计。轻弹开关,完成了 电路。电流贯穿包括保险丝盒在内的所有电线 直接通向灯泡。就像用户收到一个 在这种情况下,房客收到了光。整个过程落后 涉及电力布线的场景是不可见的 承租人。它们只是与空间内的交换机进行交互 那里控制器处理请求。
<强>模型强>
MVC中的模型是最底层的,处理核心逻辑 系统的。在大多数情况下,这可以被视为层 与数据源交互。在使用MVC的系统中,控制器 将信息传递给模型以便存储和检索 数据。继上面的控制器定义示例之后,这个 是存储订单详细信息的地方。其他数据,如股票 水平,本书产品的物理位置在很多事情中 都存储在这里。如果这是订购的最后一本书,那么 对此项目的下一个请求可能会检查它是否可用且不允许 该项目的订单不再可用。
坚持打开灯开关的例子,这个级别 我们的结构可能是电力供应。当租客轻弹 开关,内部电路必须要求电力供电 当用户从中请求数据时,请求类似 数据库,如处理请求所需的数据。如果是住所 未连接电源,无法完成此过程。 使用MVC带来的商业利益
在获得解释MVC的信息后,您将会这样做 必须看看可以从中获得什么好处。我不会去 这里有大量细节,我相信你可以申请福利 更准确哪些与你的实际情况直接相关。至 列出了基于MVC的系统的一些常见好处 几个例子:
不同的技能水平可以在不同的系统级别上运行。对于 示例设计人员可以在很少的情况下处理接口(View) 开发知识和开发人员可以处理业务逻辑 (控制器)对设计水平的关注很少。然后他们 简单地完成整合。由于上述原因 分离项目可以更容易,更快速地进行管理。设计师 可以在开发人员之前启动接口,反之亦然。这个 开发过程可以是并行的而不是顺序的 因此缩短了开发时间。容易拥有多种视图类型 使用相同的业务逻辑。通过系统清除路线。您 清楚地知道系统的不同层次。有了 明确的系统路线,逻辑可以共享和改进。这有 因为您清楚地知道允许的路线,所以增加了安全性 数据给用户,并可以进行明确的安全检查 路线。每一层都对自己负责。 (与第1点相关)这个 意味着您可以拥有可以维护的干净文件结构 并且比紧密耦合系统更容易和更快地管理 你可能有很多重复的逻辑。结构清晰意味着 发展将更加透明,这应该导致减少 开发时间,维护问题和发布周期(如果应用) 正常。
有关如何在php中实现MVC的特定PHP示例,请访问:http://phpmaster.com/the-mvc-pattern-and-php-1/
此外:了解控制器会在某个时刻向您显示&#34; View&#34;,此视图可以是html,xml,json等等。所以控制器也会处理你的AJAX请求。