0

我最近发现了优秀的 PHP 的redbean ORM 库,这使得在我的 Web 应用程序中执行 CRUD 操作变得微不足道,但我最近实现了一些我开始质疑的附加功能。为了使保存数据更加容易,我创建了一个名为 redbean.php 的程序化表单处理脚本。每当将此脚本指定为表单操作时,它将根据提交给它的数据动态创建一个新 bean:

<?php Template::startContent(); ?>

<form action="forms/redbean.php" method="POST">
    <input type="hidden" name="bean" value="book"/>
    <input type="text" name="author"/>
    <input type="text" name="pubDate"/>
    <input type="submit" value="Save Bean!"/>
</form>

<?php Template::endContent(); ?>

我开始质疑这种方法的原因是因为我的框架中的所有其他内容都使用 MVC 模式,但这感觉像是在作弊,因为数据直接从视图传递到 ORM 库。无论如何,我正在尝试使用 PHP 和 Web 编程的最佳实践来实现这个应用程序,所以我的问题是这种方法是否代表我不知道的反模式,或者我是否还有其他什么应该考虑这个实现。

4

2 回答 2

2

If you are really trying to stick to the MVC pattern, then yes, you are not adherring to the true pattern by randomly calling a script in your view to add data to the database. One of the purposes of MVC is uniformity. Your form data is passed to the controller, which calls the model to validate it and save it, and then return the error or success call back to the view that is presented. Your script, from what you have described, just ignores all that and creates the bean.

Now, considering you do have validation in your script, when you make any changes to the validation, you will have to reflect it in this script. Simplicity is the name of the game and repeating code in multiple places is just a waste.

If you desire to adhere to MVC rules, just copy a lot of it over to your model and handle it there. It will let you use your script and continue the use of MVC.

Ultimately though, its your script. If it works, it works. If you are working with production materials or in a team, I would not use it. If it is personal use or just for your personal website, go for it.

于 2013-08-21T18:47:54.970 回答
0

我认为您的方法很好 - 只需注意安全性和验证即可。RedBeanPHP 还使用 Cooker 促进了这种方法,它完全按照您的描述进行,但还增加了对关系的支持:http ://www.redbeanphp.com/cooker

这有点吓人,因为它非常非常强大,您可以轻松创建安全漏洞,但如果处理得当,您可以绕过笨拙的 MVC 模式并进行一些非常高速的开发。

不要过多关注 OOP、MVC 和模式,它们通常非常有用,但人们往往会过度使用它们。此外,许多这些技术是在不同的领域开发的,它们在其中发挥更好的作用,它们已经从这个领域复制到网络,在那里它们......很好地工作,但不太理想。例如,MVC 来自桌面 GUI,OOP 来自 Smalltalk 等。虽然它们在 PHP 中仍然有用,但您不必太担心不能正确使用它们——因为它们已被导入 PHP 域,因此不再有正确的方法。做任何有效的事。最重要的是您(和您的同事)可以轻松阅读和维护代码。就这样。

于 2013-09-15T12:04:34.607 回答