php 领域驱动设计,《领域驱动设计之PHP实现》 - 架构风格

架构风格

对于构建复杂应用,一个关键点就是得有一个适合应用需求的架构设计。领域驱动设计的一个优势就是不必绑定到任何特定的架构风格之上。相反的,我们可以根据每个核心域内的限界上下文自由选择最佳的架构,限界上下文同时为每个特定领域问题提供了丰富多彩的架构选择。

例如,一个订单系统可以使用事件源(Event Sourcing)来追踪所有不同订单的操作;一个产品目录服务可以使用 CQRS 来暴露产品细节给不同客户端;一个内容管理系统可以使用一般的六边形架构来暴露如博客(blogs),静态页等服务。

从传统守旧派的 PHP 代码到更复杂先进的架构,本章将跟随这些历史来对 PHP 圈子内每个相关的架构风格做一些介绍。请注意尽管已经有许多其它存在的架构风格,例如数据网络架构(Data Fabric)或者面向服务架构(SOA),但我们发现从 PHP 的视角介绍它们还是有一些复杂的。

美好的旧时光

在 PHP4 发布之前 ,PHP 还没有拥抱面向对象模式。那时候,写应用的普遍方法就是用面向过程和全局状态。像关注点分离(SoC)和模型-视图-控制器(MVC)的概念是与当时的 PHP 社区相抵触的。

下面的例子就是用传统方式写的一个由许多混合了 HTML 代码前端控制器构成的应用。在那个时代,基础设施层,表现层,UI,及领域层代码都交织在一起:

include __DIR__ . '/bootstrap.php';

$link = mysql_connect('localhost', 'a_username', '4_p4ssw0rd');

if (!$link) {

die('Could not connect: ' . mysql_error());

}

mysql_set_charset('utf8', $link);

mysql_select_db('my_database', $link);

$errormsg = null;

if (isset($_POST['submit'] && isValid($_POST['post'])) {

$post = getFrom($_POST['post']);

mysql_query('START TRANSACTION', $link);

$sql = sprintf(

"INSERT INTO posts (title, content) VALUES ('%s','%s')",

mysql_real_escape_string($post['title']),

mysql_real_escape_string($post['content']

));

$result = mysql_query($sql, $link);

if ($result) {

mysql_query('COMMIT', $link);

} else {

mysql_query('ROLLBACK', $link);

$errormsg = 'Post could not be created! :(';

}

}

$result = mysql_query('SELECT id, title, content FROM posts', $link);

?>

Bravo! Post was created successfully!

ID

TITLE

ACTIONS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值