美文网首页
利用整洁架构和领域驱动开发组织你的项目

利用整洁架构和领域驱动开发组织你的项目

作者: 爱写作的harry | 来源:发表于2020-11-21 13:58 被阅读0次

    前一段时间看了 Bob 大叔的《整洁架构之道》,不过那本书里没有提到具体要如何做,一直想在自己的项目实践一下。


    整洁架构

    搜索了一下,看看有没有哪些项目在用 Bob 大叔介绍的 clean architecture(CA) 的方式来组织,可以参考一下,搜索到了几个 repo,对比了下,基本的组织结构是符合 CA 的,还有的有一定的变种,比如加上了 DDD(领域驱动开发,Domain Driven Development),我总结了一下几种文件组织的方式,按照 CA 那个图从内到外划分:

    • Entities/Domains: 定义了核心的业务逻辑,不依赖于任何实现。可以是一组方法的或者数据+方法的对象,ts 中可以用接口来定义

    • Use cases/application/app: 一个 use case 是 entities 的一个特例,实现了具体的业务,例如 addPost,updatePost。依赖从外部注入(比如作为函数参数),而不是直接 import。

    • Adapters/Interfaces/implementations/controllers: 连接 use case 和外部具体的实现类。负责路由,controller,格式转换等。

    • Frameworks/infrastructure/drivers: 是具体的类和框架等。例如,mongoose,redis,express 等。在这里注入依赖,将所有的部分连接起来。

    其中一个项目还将 domain 按照 subdomain 来进行划分,subdomain 就像一个模块一样,将上面的几个部分细分到每个 subdomain 中,也就是说每一个 subdomain 内部都包含了一个 CA 的架构。

    这是我搜索到的几个项目:

    ddd-forum

    其中我比较喜欢 https://github.com/stemmlerjs/ddd-forum 的组织方式:

    • 前后端都有
    • 划分为多个模块(subdomain),每个模块下面按照 DDD + CA 进行划分
    • 分层更细,每个模块将 DDD + CA 分为最多 7 个 部分(domain,dtos,infra,mappers,repos,services,useCases)
    • 适合大型和需要多人协作的项目

    不过使用这种组织方式的时候要注意:

    • 对于简单的项目帮助不一定很明显,因为模块划分的更细相当于提高了一定的复杂度
    • DDD 在理解和使用上需要学习,有一定的门槛

    clean-architecture-example

    这个项目支持 typescript,和 CA 的架构很符合,如何我开始一个简单的 nodejs 项目,我会参考这个架构。

    其它

    其它 3 个项目也是 nodejs 的项目,不支持 typescript,如果项目不支持 typescript,可以考虑参考这几个项目。

    总结

    有个好的架构可以让项目的协作和维护更容易,你喜欢什么样的架构?

    相关文章

      网友评论

          本文标题:利用整洁架构和领域驱动开发组织你的项目

          本文链接:https://www.haomeiwen.com/subject/mhzsiktx.html