前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用发展的眼光追技术

用发展的眼光追技术

作者头像
needrunning
发布2020-03-04 13:16:49
1.4K0
发布2020-03-04 13:16:49
举报
文章被收录于专栏:图南科技图南科技

本文从 PHP 语言的 YII2 框架说起,简单谈一些技术的演变和发展脉络。

YII2 这个框架是 PHP 语言生态下的一款 Web 应用框架。有过 PHP 开发经验的开发者都不会陌生,或多多少都听说过,熟悉,至少接触过。

回到始点 PHP 官方定位

“PHP is a popular general-purpose scripting language that is especially suited to web development

PHP 官方的定义是基于轻型的 Web 应用,最典型的应用是 MVC。

YII2 初来乍到

在 2013 年,2014 年 YII2 刚刚发布的年份,YII2 被大家追逐的原因大概是面向对象数据,包加载的扩展属性,自带 Gii 自动化生成工具,清爽的 View 界面和工具包,API 序列化模型这几个。

我们返回头再整体回顾下 YII2 框架,你会发现在 YII2 官方的默认模版中,View 层还是占有很大的比重。

最近几年,前端技术演进迅猛,Web 开发都在使用前后端分离,分离大部分内容是数据的业务控制和界面的显示。

View 逐渐被前端框架,如 Vue 取代,YII2 也暴露出来它的劣势。

在 YII2 社区中安装 YII2 版本的讨论中,经常有一个 View asset 扩展安装的难题,核心就是前端页面元素与后端服务的耦合的问题,以及版本依赖的冲突。

参考文档 composer 管理 js css 等依赖文件[1]

相关命令

代码语言:javascript
复制
composer global require "fxp/composer-asset-plugin:*"

使用 YII2 构建 API

简单概括

“现在我们使用 YII2,就是在使用它构建 API 的能力。

看一看 YII2 官方文档[2] 列出来的 YII2 关键组成,基本上很多已经退出常见的使用场景。

找到了一个介绍 YII2 微框架,为服务接口而设计的 使用 Yii 作为微框架[3]

YII2微框架.png

YII2 去掉预置的模版,去掉 View 功能,剩下的核心也就是这个了。

PHP 可扩展性

关于 YII2 这款框架,有两个概念值得说明一下

“组件和模块

.YII2 的扩展性主要体现在组件(comments)的设计上

代码语言:javascript
复制
'components' => [
        'request' => [
            'cookieValidationKey' => 'dmpisthebest',
            'parsers' => [
               'application/json' => 'yii\web\JsonParser',
            ]
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'user' => [
            'identityClass' => '',
            'enableAutoLogin' => false,
        ],
]

YII2 种常见的组件 包括 user,seesion redis mongodb,log 等

感觉组件更适合做 infrastructure 的构建,而 module 则适合做业务的分离解耦

配置 YII2 带来的耦合性

我们简单分析 YII2 的主配置文件,很容易了解到 YII2 是通过模块(module),组件(components)来启动和项目功能的。 必须的模块和组件自动加载,其它组件和模块可以按需加载。虽然组件和模块为扩展性提供了便利,引用它们使用的配置,会造成入口 index.php 自动加载的 main.php 文件复杂臃肿,难以维护和阅读。

解决耦合可以从以下几个方面的尝试

“根据环境分拆配置文件

根据环境,加载不同的文件,可以 通过域名,变量等方式确定环境,进而分离配置文件。

YII2 入口文件及环境配置.png

根据组件分拆配置文件,实现组件和模块的按需加载。

复制优于依赖

“Alittle copyiing is better than a litter dependcy

有时候不一定要优先追求共享代码,应该有一部分复制冗余。公用代表着多处使用,和依赖耦合。复制虽然增加了复制的成本,却独立自由。

怎么理解这句话?

我们以 YII2 工程为例,官方推荐的 Advanced 模版中有一个公共工程 common

那我们是不是应该把项目中可以共用的数据层都放到 common 里?

YII2-模块.png

如上图,passport 和 admin 两个模块,如果都涉及同一张 User 表,依据复制优于依赖的原则,没有必要公用一个 User 类,可以单独存放为两个 User 类,用命名空间做隔离。更何况因为模块不一样,即使同一个数据表对象,相关的数据操作也会不一样。

代码语言:javascript
复制
  /**
     * @inheritdoc
     */
    public function init()
    {
        if (!$this->accountId)
            throw new InvalidConfigException('accountId required.');
        if (!$this->secretKey)
            throw new InvalidConfigException('secretKey required.');
    }

PHP 如何做单元测试

这个可以作为一个面试题与候选者沟通,但是我下边这段话,不适合作为答案。

当然会有一些单元测试组件,比如 YII2 下的 Codeception,PHPUnit 进行数据 Mock。可实际情况呢,程序直接用 var_dump,REST 接口测试程序即可调试,达到单元测试的目的。

这就是 最简单的理论和实际的出入,理论结合实践的实话。

总结

看看程序语言的发展脉络,以及前后端发展的变革,可以总结出两个词:演变和趋势。在应用程序开发中,前端这个职位是从后端细化和演变而来的,前后端分离和独立就是技术的趋势。 首先技术层面的技术选择和生态,其次职位的前端工程师和后端工程师区分,在者部门的设立原则前端部门和后端部门。

改变思路.png

演变代表着万变不离其宗,趋势代表着先进的技术就是先进的生产力。 本来想写一篇关于重新定位 YII2 的文章,最后发现本文的重点其实不是 YII2 ,而是这种变化趋势对于相关决策的度量参考。 唯有改变思路,才有出路,用发展的眼光去追技术。

参考资料

[1]

composer 管理 js css 等依赖文件: https://www.zhaokeli.com/article/8522.html

[2]

YII2 官方文档: https://www.yiichina.com/doc/guide/2.0

[3]

使用 Yii 作为微框架: https://www.yiichina.com/doc/guide/2.0/tutorial-yii-as-micro-framework

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图南科技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • YII2 初来乍到
  • 使用 YII2 构建 API
  • PHP 可扩展性
  • 配置 YII2 带来的耦合性
  • 复制优于依赖
  • PHP 如何做单元测试
  • 总结
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档