关于COLA架构的讨论

这篇具有很好参考价值的文章主要介绍了关于COLA架构的讨论。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

理解

分层

概念网上可以搜到很多,大体分为:

adapter

client

app

infra

domain

这五层。

图例这里有,就不贴了。

adapter和app相当于spring里的controller+service,domain是领域模型层,infra相当于domain的实现层(比如dao或rpc访问)。唯独client,有点疑问,目前我在实践中是把client作为app的对外接口层,隔离adapter和app之用。但也看到其他的理解,比如认为client是对外部接口调用的封装(我个人倒认为infra层做这个事情更合适,因为infra是业务防腐层)。

对象:XO

vo(value object):adapter层组装的对象,adapter将app返回的dto处理成可供界面展示的vo。它的重要特点就是展示,所以,一般服务端返回给浏览器或APP展示的数据都是vo,而从浏览器或APP调用服务端rest接口传递的数据则是dto,因为后者往往是内部数据,着重体现了传递(transfer)二字。

dto:app层要处理的对象,在前端 -> adapter -> app层间传递使用,所以叫data transfer object。app层可以将entity组装成dto(这种组装可能是内存里做的,但更一般的是数据库的关联查询语句)。

entity:特定领域的对象模型,放domain层。

do(data object):infra层对象,由infra层将rpc、查数据库获得的do转成entity。这里有个问题,如果在mybatis里做一个关联查询,查询出的其实是一个dto(比如领域模型A里包含了领域模型B),但这个dto是不能放app层的(那样infra无法访问),逻辑上也不建议放infra层,就只能放domain了。

实践当中,有两个极端,一是让vo在各层间传递,实际充当了四类对象,这样的vo很大,填充的字段会越来很多,很难做到内聚和解耦;一是每层都做自己的XO,这样会有很多看起来很相似的数据类,数据类间的converter工作量也很大。

我个人的建议:至少要有entity(关联查询时是dto)和vo这两层对象,确保界面与业务领域的适当解耦,同时数据converter的工作量也可控。当然,如果就是单表的CRUD,仅有一层entity对象也是可以的(实际业务中应该不多见,毕竟界面展示通常要考虑数字转枚举、国际化展示等,新做一层vo更合理)。

依赖强约束

  • app层不能访问infra层,因为它只能看到domain及其中的domainGateway

  • adapter可直接访问app层,当然也可通过client层的接口隔离(不强制,但代码结构更清晰),但不能直接访问infra层。实际当中,实际当中,adapter可能有需要访问domain层的诉求,比如根据外部传入的查询dto在mybatis里拼动态SQL场景,该dto将跨越adapter、app、domain和infra四层,这时,可以考虑在app层做一下XO的转换(例如通过继承、属性复制等手段)。文章来源地址https://www.toymoban.com/news/detail-578618.html

到了这里,关于关于COLA架构的讨论的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CS61B Project2:关于生成地图算法的讨论(一)

    Project 2介绍了一个渲染引擎,可以根据传入的TETile[][]数组来在对应的位置生成砖块(TETile对象表示各种不同的砖块类型,包括地板、墙、花等元素),我们的任务是完成一个用于生成可探索世界的引擎,并设计和实现一个基于2D图块的游戏(就像塞尔达传说:织梦岛一样)。

    2024年03月13日
    浏览(46)
  • 【线程安全的讨论(一)】CPU多核缓存架构和JMM

    计算机的基本组成图 CPU 缓存为了提高程序运行的性能,现代 CPU 在很多方面会对程序进行优化。CPU 的处理速度很快,内存的速度是其次的,磁盘的速度更慢( 由于 CPU 向内存中获取数据得经过系统总线等原因,会影响 CPU 整体的执行效率,所以设置了多级缓存策略 )。 CPU

    2024年02月15日
    浏览(32)
  • 关于实变函数中德摩根定律和集合列上下极限的一些讨论

    本文内容来自作者本人在学习《实变函数与泛函分析基础》一书过程中的一些思考。 文章目录 前言 一、德-摩根定律 1.概率论与逻辑代数 2.集合论 二、集合列的上极限与下极限 1.基本定义 2.个人理解 3.一个例子 4.集合形式的描述定理 结语        实变函数论是克服黎曼可积

    2023年04月08日
    浏览(38)
  • 想着和GTP讨论关于人的一些哲学问题(答案很有意思)

    我:我觉得人活着没啥意义 GPT:作为AI语言模型,我当然不能给你身为人类的绝对回答,但我可以提供一些哲学和心理学上的观点供你参考。 人类作为一种高智能的生物存在于地球上已经很久了,并对自然环境和社会文明做出了许多贡献。每个人有自己的一种“存在意义”,

    2023年04月20日
    浏览(48)
  • 想着和GTP讨论关于人或AI的一些问题(答案很有意思)

    我:我觉得人活着没啥意义 GPT:作为AI语言模型,我当然不能给你身为人类的绝对回答,但我可以提供一些哲学和心理学上的观点供你参考。 人类作为一种高智能的生物存在于地球上已经很久了,并对自然环境和社会文明做出了许多贡献。每个人有自己的一种“存在意义”,

    2023年04月23日
    浏览(79)
  • 关于讨论IDEA创建springboot项目后启动类不显示启动按钮的问题

    最近准备创建一个springboot项目来开发微信小程序后台,但是在创建项目后,发现启动类没有启动入口显示是CurrentFile, 文件样式也与之前显示的不一样,我理解应该是没识别为Java项目文件,而是一个普通文件 右键pom.xml文件,选择 Add as Maven Project 等待ing… 等待若干分钟后,等

    2024年02月12日
    浏览(50)
  • 关于微信小程序与Java后台交互数据中中文乱码问题的讨论

    如果小程序端发起的请求参数中含有中文,直接发送到后台会显示乱码,需要在header中设置UTF-8编码 这样后台接收到的中文就能解析正常了 为了便于测试,后台接口简化如下: 结果小程序端显示的用户名为“寮犱笁”。 起初怀疑后台返回的编码格式不对,网上说对于Spring

    2024年02月09日
    浏览(38)
  • 关于用栈和队列分别解决走迷宫问题的方法讨论(参与者:陈卓,毛敏磊)

    对于生活中最常见的小游戏——走迷宫,相信大家都不陌生,人为走相信大家都会走,但能不能用代码实现,我们认为是可以的,以下是我们对如何走迷宫的一些看法和代码实现(cz负责队列解决,mml负责用栈解决) 先简单介绍一下 队列 :队列是一种操作受限的线性表,只

    2024年04月08日
    浏览(78)
  • 【LeetCode】1654:到家的最少跳跃次数的解题思路 & 关于力扣无法return的BUG的讨论

    有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发,到达它的家。 跳蚤跳跃的规则如下: 它可以 往前 跳恰好 a 个位置(即往右跳)。 它可以 往后 跳恰好 b 个位置(即往左跳)。 它不能 连续 往后跳 2 次。 它不能跳到任何 forbidden 数组中的位置。 跳蚤可以往

    2024年02月10日
    浏览(49)
  • 关于“产品经理的方法论都是自上而下提出的,缺少形而上学的认知”此观点的讨论

    来自脉脉的有个观点很有趣: “产品经理的方法论都是自上而下提出的,缺少形而上学的认知” 这是chatGPT的回答: 这是一个有趣的观点,但我认为它并不完全正确。首先,产品经理的方法论并不一定都是自上而下提出的。虽然有些方法论可能是由管理层或高级领导人提出的

    2023年04月19日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包