将MySQL代码与PHP代码分离是一种标准的、常见的做法吗?
有人告诉我,将将MySQL代码与PHP代码分离是一种标准的、常见的做法吗?,php,mysql,Php,Mysql,有人告诉我,将MySQL代码与PHP代码分开是一种常见的做法,这是真的吗?这是一个新的编码标准吗?这样做有什么好处吗 有人能告诉我在编写mass(例如开源脚本)时,什么是最佳的编码实践(PHP/MySQL) 谢谢 好问题 有人告诉我,将MySQL代码与PHP代码分开是一种常见的做法,这是真的吗? 绝对正确 这是一个新的编码标准吗? 旧观念。没有标准,但事实上是存在的 这样做有什么好处吗? 许多好处 层之间的解耦带来的好处 当业务逻辑与表示逻辑解耦时,如果需求发生变化,您可以轻松地对其
MySQL
代码与PHP
代码分开是一种常见的做法,这是真的吗?这是一个新的编码标准吗?这样做有什么好处吗
有人能告诉我在编写mass(例如开源脚本)时,什么是最佳的编码实践(PHP/MySQL
)
谢谢 好问题
- 有人告诉我,将MySQL代码与PHP代码分开是一种常见的做法,这是真的吗?
- 绝对正确李>
- 这是一个新的编码标准吗?
- 旧观念。没有标准,但事实上是存在的
- 这样做有什么好处吗?
- 许多好处
- 层之间的解耦带来的好处
- 当业务逻辑与表示逻辑解耦时,如果需求发生变化,您可以轻松地对其进行更改
- 因此,不仅要将sql与php分开,还要将HTML代码与php逻辑分开
PRADO
使用ORM
ORM=对象关系映射。
这也被使用。但我不知道PHP有ORM框架。如果有人知道,请告诉我@jszobody建议(谢谢)
谢谢。问得好
- 有人告诉我,将MySQL代码与PHP代码分开是一种常见的做法,这是真的吗?
- 绝对正确李>
- 这是一个新的编码标准吗?
- 旧观念。没有标准,但事实上是存在的
- 这样做有什么好处吗?
- 许多好处
- 层之间的解耦带来的好处
- 当业务逻辑与表示逻辑解耦时,如果需求发生变化,您可以轻松地对其进行更改
- 因此,不仅要将sql与php分开,还要将HTML代码与php逻辑分开
PRADO
使用ORM
ORM=对象关系映射。
这也被使用。但我不知道PHP有ORM框架。如果有人知道,请告诉我@jszobody建议(谢谢)
谢谢。是的,这是许多编程语言的标准。通常,您会编写存储过程,并让php代码利用这些过程来完成数据库工作。这种分离使得管理代码库更加容易,并有助于维护和扩展 是的,这是许多编程语言的标准。通常,您会编写存储过程,并让php代码利用这些过程来完成数据库工作。这种分离使得管理代码库更加容易,并有助于维护和扩展 有人告诉我,将MySQL代码与 PHP代码,这是真的吗 我认为,您正在谈论的是,将应用程序逻辑分为几个部分(构建一个好的体系结构),这样您就可以保持事情的组织性和可维护性。实际上,这是一个太广泛的讨论,我可能无法正确地描述所有内容,但要回答您的问题,是的,这是一个很好的(推荐的)实践,也是软件开发中的一个设计原则 在应用程序中,最重要的部分是为应用程序服务的域/业务逻辑,它应该与其他逻辑分开,例如表示逻辑(
UI
)。例如,如果您的应用程序处理用户和产品的创建,那么您可以将它们作为应用程序的一个实体保存在单独的位置。比如说
用户管理
class User {
public function createUser()
{
// ...
}
}
class Product {
public function addProduct()
{
// ...
}
}
产品管理
class User {
public function createUser()
{
// ...
}
}
class Product {
public function addProduct()
{
// ...
}
}
这是您的业务逻辑,您可以从单独的类/位置使用/调用这些逻辑,如
$user = new User;
$user->create();
现在,考虑一下数据存储机制,如果您创建了一个新用户,您可能需要将所有信息放在一个地方,它可能是一个数据库、平面文件或xml文件,因此,您应该在createUser()
函数中做些什么,您应该在数据存储和业务逻辑之间使用一个数据访问层,这意味着,无论您使用什么数据存储,您都不应该直接使用createUser()
函数(业务逻辑)中的任何代码,而是通过另一层()访问数据存储,例如,您的createUser()
函数可能如下所示
class User {
protected $storage = null;
public function __construct($storage)
{
$this->storage = $storage;
}
public function createUser()
{
$userData = $_POST['first_name'];
$userData = $_POST['user_name'];
// more fields...
// data validation
$this->storage->save($userData);
}
}
class DbStorage{
protected $db = null;
public function __construct($database)
{
$this->db = $database;
}
public function save($data)
{
$this->db->insert($data);
}
}
$config = array('hostname' =>'localhost', 'username'=>'root', 'password'=>'123456', 'database'=>'myDatabase');
$storage = new DbStorage(new MySqlDriver($config));
$user = new User($storage);
class MySqlDriver(){
public $connection;
public $database;
public function __construct($config)
{
$this->connection = mysql_connect($config['hostname'], $config['username'], $config['password'], $config['database']);
mysql_select_db($db);
}
public function insert($data)
{
// code for insert (mysql)
}
}
现在,要创建一个用户并将其保存到数据库中,您可以像
$storage = new DbStorage();
$user = new User($storage);
也许,您想使用平面文件来存储数据,而不是数据库,没问题,只需更改数据存储,即
$storage = new FileStorage();
$user = new User($storage);
现在,看到区别了吧,您的save方法不知道存储机制,它只调用存储->save()
,每个存储都有自己的存储机制,东西都是有组织的、干净的、易于维护的,更改存储机制而不必对代码做任何更改。所以,就像
业务逻辑-->数据访问层-->数据存储
在数据访问层,您应该根据您的存储机制编写代码,如果您有一个数据库作为存储,那么您可以根据该机制编写代码,在这种情况下,您的DbStorage
可能有自己的抽象数据库层
(不同数据库的不同驱动程序,即mysql
,oracle
等),这里ORM
起作用
所以,最主要的是保持事物松散耦合,这有助于您构建一个干净且可维护的应用程序。这只是一个小主意。这些链接可能会对您有所帮助
class OracleDriver(){
// ...
public function __construct($config)
{
// ...
}
public function insert($data)
{
// code for insert (oracle)
}
}
return array(
'mysql' => array(
'hostname'=>'localhost',
...
),
'oracle' => array(
'hostname'=>'localhost',
...
)
);