V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mahone3297
V2EX  ›  问与答

symfony doctrine 如何优雅的编码

  •  
  •   mahone3297 · 2015-05-18 17:35:24 +08:00 · 2649 次点击
    这是一个创建于 3480 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我这边写php,然后用的是symfony框架,orm用的是doctrine。
    1. 看看php写1对多的映射
    /**
    * @ORM\OneToMany(targetEntity="KdtOrder", mappedBy="kdtTrade", cascade={"persist"})
    /
    private $kdtOrders;
    另一边多对1
    /
    *
    * @ORM\ManyToOne(targetEntity="KdtTrade", inversedBy="kdtOrders", cascade={"persist"})
    */
    private $kdtTrade;

    再看看ror
    class Supplier < ActiveRecord::Base
    has_one :account
    end

    class Account < ActiveRecord::Base
    belongs_to :supplier
    end
    真是想哭了。。。

    1. 再说说constructor的问题 doctrine的话,我会在constructor函数中,这样写

    public function __construct(array $params)
    {
    if (isset($params['x1'])) $this->setX1($params['x1']);
    if (isset($params['x2'])) $this->setX1($params['x2']);
    if (isset($params['x3'])) $this->setX1($params['x3']);
    ......
    }

    这种繁琐的代码,写的要吐血了。。。求大家指导。。。

    8 条回复    2016-03-17 22:13:29 +08:00
    myc0210
        1
    myc0210  
       2015-05-18 17:57:47 +08:00
    感觉你需要的是一个智能的IDE。。。而不是如何优雅的编码。因为人家就是这么用的。你要如何优雅。关于
    if (isset($params['x1'])) $this->setX1($params['x1']);
    if (isset($params['x2'])) $this->setX1($params['x2']);
    if (isset($params['x3'])) $this->setX1($params['x3']);
    是打错了吧 = =? 三个?$this->setX1?如果是这样你一个foreach不就搞定了。如果是SETX1,SETX2,SETX3那你就是得一个一个set 没办法。要不然你自己写个setParam的函数 全部用这个也可以。。。
    whatisnew
        2
    whatisnew  
       2015-05-18 18:03:00 +08:00
    我真心觉得他这个 Docblock Annotations 丑的无敌,用 yaml 或者 xml 其他也是丑的无敌。。。php 无解
    mahone3297
        3
    mahone3297  
    OP
       2015-05-18 18:07:57 +08:00
    @myc0210 抱歉,确实是我打错了,是分别setX1,setX2,setX3
    》感觉你需要的是一个智能的IDE。。。而不是如何优雅的编码。因为人家就是这么用的。你要如何优雅。
    你说的,好像也有点道理。。。但是,我觉得,也可以考虑使用 __get 这种magic method去处理。。。
    问下,你是用symfony的么?有什么best practice分享下?
    mahone3297
        4
    mahone3297  
    OP
       2015-05-18 18:09:41 +08:00
    @myc0210 你会在constructor里写这些set函数吗?其实不在构造函数里写也可以,在外部生成这个entity的地方,分别去调用各个setXX函数。但是我感觉,写在construct里好像比较好。
    mahone3297
        5
    mahone3297  
    OP
       2015-05-18 18:10:07 +08:00
    @whatisnew 相比于yaml,xml,我觉得,写成annotation算是漂亮的了。。。
    myc0210
        6
    myc0210  
       2015-05-18 22:06:29 +08:00
    。。。没诶= =我用yii2。。。
    thenbsp
        7
    thenbsp  
       2016-03-17 20:49:46 +08:00   ❤️ 1
    mahone3297
        8
    mahone3297  
    OP
       2016-03-17 22:13:29 +08:00
    @thenbsp 看过,然而并没有解答我的问题。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5864 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:30 · PVG 11:30 · LAX 19:30 · JFK 22:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.