不带Doctrine的Symfony2是什么样?

这是一个奇怪话题,因为Doctrine是Symfony2的几个核心之一(另外几个是DI, Twig, 集成的单元测试).

怎么会突然想到不带Doctrine的Symfony2呢?因为最近用Slim用得很爽,直接是Twig+Slim+PDO,虽然有点阳春白雪,但是用起来果断很爽,比原生写PHP要方便很多,比Symfony2要轻便很多.

仔细对比了一会,最大的区别应该还是Form的处理,换句话说,核心依然是Doctrine,在为没有Doctrine就没有方便的操作Form的接品,这种事情让我突然有一种奇怪的感觉:也许Symfony2走到最后,不只是需要一些代码生成器,更需要一个IDE.

如果使用Symfony2但却不使用Doctrine,会怎么样呢?

相对来说,当再做Symfony2项目时,假如没有Doctrine,那么应该更适合从页面入手,先做一个页面出来,然后考虑需要展示的数据有哪些,再然后呢?做一个简单的数据表,然后在Service中处理一下db操作,写一个单元测试.

这个数据链接要么是写一个pdo的单例,要么是直接从entity manager中获取,用完应该记得关闭.

似乎这样用Symfony2比直接用Doctrine要复杂?

那么是不是说明DI应该配合ORM来用,而不应该直接用?

这个问题在Java时代就开始思考,这么做也许可以,也许不可以,不过Symfony2很适合多人协作,Slim更适合一个人开发.Slim要想多人开发自然也可以,只是分隔性不如Symfony2.

我思考问题太简单了,哪能只考虑这些,可能是因为今天写了一天代码,头有点晕吧.不管了,睡觉,明天再继续.

转载自:http://saharabear.com/weblog/?p=1840

Symfony2之不能承受之重

本来想写成PHP之不能承受之轻,但PHP本身问题并不大,易学易用,大多数需要的东西都有,友好的C扩展接品,虽然有一些不好的语法等问题存在,但不能说PHP之不能承受之轻.

那还是说说Symfony2这个自带DI的Web开发框架吧,最起码说一说Symfony2之不能承受之重.

首先,组件.Symfony2在PHP的世界里带来了组件的概念,这个概念非常好,特别是以完全面向对象的风格,引入各种bundle作为组件.虽然21世纪的技术早就普及的组件的概念,但是Symfony2实现得非常好,比如安全组件,再比如权限等等.但没有完美的东西,Form组件与验证组件用起来就太重了,不方便单元测试,使用复杂,到今天我还是记不住所有语法,问过其他人,也大多记不下语法.

然后, 自然要提到I18N组件,简直就是能让人疯狂的组件,没有文档说明如何配置是正确的,有人用yml,有人用xml还有人用更奇怪的办法.所以,每当碰上这种I18N的情况,我宁可多加一个部分,在Web层配置两套twig.

再然后,单元测试.不少人说Symfony2的单元测试挺好啊,又用不着自己处理垃圾数据,直接放在内存里面跑,但又有几个人真正了解如何以bootstrap的模式启动Symfony2的内核?真正的单元测试又怎么能够不以这种方式做单元测试和数据层?别提Mock,我知道什么是Mock,但你只测试QueryBuilder生成的query语句还不够,一定要跑起来再看实体定义,Symfony2应该增加这部分的默认配置.

再再然后,就是Bundle的继承关系,没有一个真正优秀的设计,这部分继承关系,如同鸡肋,食之无味,弃之可惜(比如用FOS的组件就需要用到这个特性)

最后,再折腾一句:cache设计得不合理,很多人都需要花很久才能真正用好,应该再自动化一点,智能一点,多封装几种算法.

又写废话了,Symfony2还是最好的PHP框架之一,只是有一些地方,总是有着开发人员无法承受之重.

转载自:http://saharabear.com/weblog/?p=1799