什么是框架?什么是教义 2? [复制]
Posted
技术标签:
【中文标题】什么是框架?什么是教义 2? [复制]【英文标题】:What is a framework? And what is Doctrine 2? [duplicate] 【发布时间】:2014-04-03 12:46:53 【问题描述】:我知道一些 html、php、CSS 和 mysql。我还没有掌握的东西是框架。我正在尽我最大的努力去了解它们是什么以及它们做了什么,但我这辈子都无法理解。
请有人以非常简单的方式解释框架和 Doctrine 2,因为我不知道从哪里开始,但请注意它们肯定是必需的。
【问题讨论】:
参考这个答案:***.com/questions/4507506/… Doctrine 是 Object-Relational Mapper - 如果你在网上搜索这个词,你会找到你想要的。 框架是可以在项目中使用的预先编写的代码。 【参考方案1】:我可以在这里告诉你什么是框架,但问题的答案What is a software framework? 已经做到了。
所以,关于Doctrine。它是一个对象关系映射器(ORM)。它基本上允许您在关系数据库中插入/更新/选择/删除对象,或通过类生成/更新表。
让我们假设一个简单的Member
表:
通常,您会编写查询以在表中插入某些内容。如:
INSERT Member VALUES ('Andy', 'andy@example.com', 30);
ORM 允许您做的是将一个 映射对象 插入到表中。表中的值将与您通常通过查询插入它们时看到的一样。
我们来看一个非常简单的Symfony框架中的Doctrine示例:
namespace ExampleProject\MemberBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Member
* @ORM\Table()
* @ORM\Entity
*/
class Member
/**
* @var integer
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
* @ORM\Column(name="email", type="string", length=255)
*/
private $email;
/**
* @var string
* @ORM\Column(name="age", type="integer", length=3)
*/
private $age;
/* getters and setters here */
上面的类被映射(用DocBlocks注释)并代表我们的Member
表,描述了哪些部分将被视为数据库中的列。简单地说:类内的映射变量将作为数据库中的列可见。您还可以通过映射这些变量来判断您希望列具有哪种数据类型(字符串/整数等)。
现在在我的代码中,我可以调用 Doctrine 实体管理器,创建一个新的 Member
对象,启动属性并将其保存到数据库中,采用面向对象的语法:
$em = $this->getDoctrine()->getEntityManager();
$member = new Member;
$member->setId($id);
$member->setName($name);
$member->setEmail($email);
$member->setAge($age);
$em->persist($member);
$em->flush();
如您所见,我们需要做的就是调用将对象保存在数据库中。在后台,ORM 还执行INSERT
查询(类似于我上面提到的那个)。您甚至可以启用一个设置来查看实际执行的查询。
现在这看起来可能非常不必要并且需要大量工作。但它会为你节省很多时间。从您的源代码的角度来看,它更加面向对象,并且您将能够比不使用 ORM 更好地维护您的(中型/大型)应用程序。此外,如果您当前将 MySQL 作为数据库,但您想将其更改为 PostgreSQL,您可以对代码进行最少的更改,因为您的 ORM 将处理底层查询。
所以本质上,ORM 是一个具有面向对象语法的数据库抽象层。
【讨论】:
以上是关于什么是框架?什么是教义 2? [复制]的主要内容,如果未能解决你的问题,请参考以下文章