什么是框架?什么是教义 2? [复制]

Posted

技术标签:

【中文标题】什么是框架?什么是教义 2? [复制]【英文标题】:What is a framework? And what is Doctrine 2? [duplicate] 【发布时间】:2014-04-03 12:46:53 【问题描述】:

我知道一些 htmlphp、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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

什么是新静态? [复制]

什么是依赖注入? [复制]

zend 框架 2 + 教义 2 安装

“应用程序框架”是啥意思? [复制]

Flask 框架中的线程本地是啥意思? [复制]

Zend Framework儿童系列不能保湿