一种领域驱动设计(DDD)方法在Laravel Frame中的实践

栏目: IT技术 · 发布时间: 4年前

内容简介:译者介绍

【编者的话】Laravel是一个健壮的框架,过去两年我一直使用它。直到今年初,它标准的架构对于我参与过的工程来说是足够的。

然而现在来了一个新的挑战,对于新的工程我们并不知道工程规模有多大,但是我们都知道工程应该根据情况需要尽可能的进行扩展,而且它对于新的团队成员来说应该是不难接受的,而未来可能会把应用的每个模块转换成微服务。所以我开始学习软件架构模式并选择领域驱动设计(DDD)。

原文链接: https://medium.com/%40ibrunoto ... dd473 (翻译:吴伟略)

===========================================

译者介绍

,中南大学自动化专业,深圳市中电电力技术股份有限公司软件研发工程师。

关于DDD

DDD包含了一个持续改进场景的实现,可以作为一个极其有用的 工具 来开发高质量的软件来满足用户的需求。这个软件模式是由Eric Evans创造的。根据20年的面向对象技术的开发经验,他写了一本这方面模式的书。这个架构模式的焦点是领域,所以为了使软件完美的符合特定领域,有必要创建一门语言。在这门语言中,有很多术语是业务专家和开发团队日常交流的一部分。

为了保持聚焦于领域,我们需要把领域模型从系统其它部分隔离出来。实现这块的一个途径是分层架构:

- UI(用户界面):负责给用户展示信息和接收新的数据。在现在或者未来,它的实现方式包括web、控制台或者其它展现技术;

- 应用层:这一层没有业务逻辑,它是很功能单一的一层,负责连接用户层和其它更低的层。

- 领域层:展现的概念、规则和业务逻辑。整个DDD聚焦点都在这一层。负责把和其它系统进行通信,持久化详细信息等操作转发到基础设施层。

- 基础设施层:给其它层提供结构化的资源。它们通常是系统化的一部分,负责持久化数据,连接数据库,通过网络发送信息。

一个领域,也被称为上下文或者主题,不一定是一个实体。

可以将领域理解为应用知识领域。例如,在一个博客应用中,我们把博客看作一个领域,在它里面,我们会有一些和帖子进行交互的业务规则,像资源仓库、模型、服务等等。帖子,评论和分类是博客内部模型的示例。

标示领域的一个技巧就是与多个实体进行交互。

在了解我们的DDD方法前,你有两件事情需要了解:

- Laravel/Laravel是属于你的,它提供了标准的骨架但你可以修改它,以最佳的方式满足你的需要。不要和供应商的Laravel/framework混淆。

- 没有所谓“标准”的DDD方法,它是一个不断改进的过程,你将不断学习和适应它。

我们的DDD方法

在开始使用该方法时,要记住一点,我们不是和框架“打架”,因此我们所有的修改都考虑到下一个版本升级的便利性,但也会尝试把框架的优点融入我们的领域中。

在我写下这篇文章的时候,我们 Laravel 工程结构是这样的:

一种领域驱动设计(DDD)方法在Laravel Frame中的实践

现在,你觉得这个应用容易维护吗?我觉得容易维护,理由如下:

- 如果X领域出bug了,改X领域就好了

- 如果Y有新功能需要添加,改Y领域好了

- 一个新开发人员负责Z领域,那么在Z领域开发好了

- W领域解构放到微服务里面?那么就把它挪出来放进去

总结

正如我之前所说,没有标准的途径来定义DDD结构,在学习了这个模式之后我们就是使用文章所示的工程结构。但是它是持续的过程,你需要不断改进来达到最好的效果。

如果你读完这篇文章后想“我可以从哪里学习更多领域驱动设计的知识”,我在下面放了一些文章链接和代码仓库,这些都是我最近几周阅读的关于这个主题的。

文章列表:

- DDD — Introdução a Domain Driven Design

( http://www.agileandart.com/201 ... esign /)

- DomainLanguage

( http://domainlanguage.co m)

- Conciliating Laravel and DDD

( http://lorisleiva.com/conciliating-laravel-and-ddd /)

- How to setup Domain Driven Design (DDD) in a Laravel app

( https://oliverlundquist.com/20 ... p.htm l)

代码仓库:

- https://github.com/ibrunotome/ ... lates

- mikaelmattsson/php-ddd-example

- codecasts/laravel

- emtudo/laravel-vue

- artesaos/migrator


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS实战手册

CSS实战手册

David Sawyer McFarland / 俞黎敏 / 电子工业出版社 / 2007-07-01 / 68.00元

CSS是一场革命 借用quirksMode的PPK(Peter-Paul Koch)的话来说:CSS是一场革命。 Ajax的浪潮正在逐步改变着Web开发的方式。谈到Ajax,开发人员似乎更注重于 XMLHttpRequest 和 JavaScript ,而淡忘了Ajax还有一个重要的组成部分 CSS。 事实上,CSS和DOM、xHTML以及粘合它们的JavaScript密不可分,......一起来看看 《CSS实战手册》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具