Yii框架Model的耦合性问题

Yii框架是我成为PHP程序员以来,深入使用的第一款框架。我喜欢这个框架,是因为这框架体在用于快速原型实现的时候,异常的好用。但是这款框架绝非完美,比如它的Model设计。

在业务实践过程中,我发现一种常见的Pattern,并非是技术上的,而是运营上的,我所在的团队和后续我将要参与的团队,我都会建议他们在做业务站点的同时,配套实现一个运维站点,这样可以更好、并且以更低成本地去运维一个业务。关于这个配套的问题,本文不讲,提一下是因为,要实现这个配套运维的站点,我们需要将一部分业务逻辑拷贝到里面。

因为Model里面实现了主要的业务逻辑,所以,自然而然的,运维站点也需要用到相同的Model,但是因为运维站点事关重大,一般不会部署到公网服务器,所以项目代码上也是分离的,这时候,就需要同一个Model两头使用,最差的做法是两边拷贝,更好的做法,是通过链接来两边复用。

这时候,问题就出现了。因为我发现Model的设计,耦合很严重,主要就是Yii框架的核心配置文件,Model链接的数据库,是通过配置文件指定的。但是它的配置方式又比较奇怪,就是所有的Model都默认连接同一个数据库,所以,在配置文件里,并没有指明Model和数据库的映射关系,只是说明了数据库的连接信息。

而实际业务实现中,没有什么时候,只用一个数据库就可以搞定所有业务的,这本身就是把鸡蛋放一个篮子,自找麻烦。当数据库多了以后,发现Model不能连接多数据库,麻烦就大了。这个时候,只能把Model和数据库的映射关系写在Model里面,然后Model就耦合了数据库连接的名字。严重限制了它的复用性。

因为一般我们在业务侧,Model连接主库,到了运维侧,如非必要,Model会连接从库,这个时候,数据库连接的名字不一样,不管怎么调整配置文件,一定会冲突,所以就不得不用一些很tricky的手段去解决这种问题。而这种tricky手段稍有不慎,就进一步破坏了项目的代码的可复用性。

关于这个,我还没有什么太好的方案,我也只能指出,其设计上的缺陷。

最后,这个文章我也不指望有人能看懂了,就是自己在实现业务的时候的一点想法,或许,后续等我经验足够了,我真的会自己出来实现一个框架,把这些都解决,记录下来,我至少知道,问题在哪里。

你可能感兴趣的:(Yii框架Model的耦合性问题)