范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

如何让代码结构变得优雅?

  您所遇到的最流行的代码排列方式是什么?我最常看到的一种是按技术堆栈中的层将所有类分组。因此,在 MVC 风格的系统中,所有控制器都在一起,所有服务都在一起,所有存储库都在一起,所有 POJO 在一起等等。让我们称这种约定 为组织代码 的 "堆栈"风格 。
  其实我感觉这种方式不太好,接下来谈一下原因。 不恰当的抽象
  人们不会按堆栈层阅读代码。从来没有人说"给我展示这个系统的所有 API"或"给我这个系统触发的所有查询"。人们沿着域边界阅读代码。例如在酒店管理系统中,人们会考虑房间、客人和价格等。
  由于"堆栈"风格的代码是按照技术层组织的,因此很难从系统在存储库中的方式来理解系统的逻辑模型。"堆栈"风格暴露的边界是技术层。我们无法从这段代码中理解"名词"以及它们之间的关系。你必须为此深挖一层。对于阅读代码的新人来说,这种对"逻辑"结构的混淆是一个巨大的摩擦源。
  在酒店管理示例中,"实体样式将所有与客人相关的代码(不考虑技术层)放在一个包中,所有与房间相关的代码都放在另一个包中,依此类推。这些包中的每一个都可以在"堆栈"样式中拥有自己的内部组织,或者只有几个处于同一级别的类。这使得在一个地方轻松找到与客人相关的所有内容。 凝聚力差
  "堆栈"排列方式的另一个常见论点是它将单独的模块放在技术堆栈的不同层。例如,控制器与服务、服务与存储库等明显分离。要在技术堆栈的不同级别找到类,您需要转到代表这些级别的包。这鼓励了不同层之间的解耦。
  这个论点的问题在于它专注于耦合,而忽略了另一个关键属性——内聚。在哪些类之间我们想增加内聚性,哪些类我们想减少耦合?由于所有服务都位于一起,我们是否可以说它们高度内聚但与它们的模型类或存储库分离是可以的?我们是否可以让所有存储库相互高度依赖,但与服务层的业务逻辑解耦?显而易见的答案是否定的!这种代码将是教科书般的大泥球。将这样的系统重构为更小的系统绝对是一场噩梦,因为您必须在技术堆栈的每一层解耦类。它违背了使用 MVC 风格的全部目的。
  "实体"风格 OTOH 促进了凝聚力,同时仍为技术堆栈风格解耦留出空间。如果所有与酒店相关的类都相互依赖(技术上或概念上),这是可以的,因为它们无论如何都形成了一个单一的工作单元。它还使未来的重构更容易,因为逻辑边界比"堆栈"风格更清晰。
  很难改变
  为了在以"堆栈"风格组织的代码库中进行任何有意义的更改,开发人员必须跨越多个包。例如,要向实体及其 CRUD API 添加新字段,将修改所有包。这会造成认知负担,因为开发人员必须修改许多"事物"而不是单一的逻辑事物。
  在"实体"中,如果你改变了一件事情,你只会在一个逻辑边界上做出改变。这使得对它们的更改更容易,因为如果使用单个实体,我们只在代码库的一小部分工作。如果你跨越顶级包,你就是在跨越定义的逻辑结构,这会提醒你潜在的与耦合相关的注意事项。 限制设计选择
  由于代码是按技术堆栈或功能组织的,它限制了人们思考系统设计的方式。例如,由于业务逻辑应该进入"服务",开发人员拒绝使用正确的设计结构,宁愿将所有内容都塞进服务中,从而创建数千行的噩梦类。即使他们使用良好的设计原则,代码的组织也会抵制他们,因为每个新的"类型"都必须在一个独特的包中。如果我想在不同的服务中使用工厂模式,那么我必须发明一个名为 factory 的 全新包层次结构,此后所有工厂都应该去那里,无论它们是否彼此有任何关系。
  正如我之前提到的,"实体"不假设每个逻辑包在内部是如何分组的。它可以是堆栈样式,也可以根据需要拥有任意多种类型的包,而不会影响在另一个实体的包中所做的选择。
  这里的一个问题可能是如何组织跨越实体的事物。例如,在多个实体上运行的工作流。这两种风格都没有一个简洁的答案,但 IMO 的"实体"风格在这方面做得更好,因为它强制在所有实体包之外创建一个新包。这突出表明工作流是一个新概念,并且可能是应该独立开发的系统边界。这个想法是将相似的概念组合在一起,但不受单一概念约束的事物仍然可以在基础上拥有自己的逻辑。 建议
  一种更好的组织代码的方法,可以按它所代表的逻辑实体对其进行分组。让我们称之为 组织代码 的 "实体"风格 。这个想法是确保与单个概念相关的所有类保持在一起。通过将逻辑实体放在首位,我们正在针对人类理解进行优化(编译器不关心您将哪个类放在哪里)。凭借代码的呈现方式,开发人员被推动对实际系统边界所在的位置做出更明智的选择。不是在 SomethingRepository 和 SomethingElseRepository 之间,而是在 Something 和 SomethingElse 之间作为概念。
  现在让我们了解为什么我认为实体模型比堆栈模型更好。

采黑土也违法?黑龙江审判7起盗采黑土案例,最高7年有期徒刑笔者东邪中国幅员辽阔,东西南北的地形地势各不相同,因此创造出了华夏文明的不同分支。正所谓一方水土养一方人,从古至今每个地方的人都要靠土地吃饭,如果土地出现问题,那么人的生存就难以保楷书东坡记游卷,明代1513年,祝允明楷书东坡记游卷,明代1513年,祝允明,纸本墨笔,手卷,纵17。6厘米,横515厘米,辽宁省博物馆藏祝允明东坡记游卷以小楷录东坡记游若干节,为祝允明五十三岁时书写。其时,书家正值盛吴某凡最后杀手锏能否成功呢?绯闻事件其实早已变成了对法律的挑衅,当得知吴某凡境之后,他的一些粉丝还说要联合救助吴亦凡,更有甚者煽动情绪,说要移民让国家损失。面对这些不理智的粉丝你们怎么看!被刑拘以后,事情就会吴某凡又双叒叕出事了吴亦凡被刑拘了,但这似乎并不是大结局,吴亦凡背后还可能有惊天大瓜!北京朝阳区警方关于吴亦凡的通报,中国禁毒的官方平台也转发了相关消息。这意味着吴亦凡事件不仅仅是简单的涉嫌强奸,似乎伪造回执与女子发生性关系后,男子主动报警,构成强奸罪吗?在网上认识该女子后,该男子提出愿意支付2万元与她发生性关系。女方同意后,男方立即给女方寄去了2万元的假收据。后来,他们去酒店做爱。在很短的时间内,男子以转移为由多次与女子发生性关系警方通报吴某凡涉强奸被刑拘,来看独家观点打开手机浏览器,看到一个热点新闻,也是一个振奋人心的消息,据平安北京朝阳通报,吴某凡涉强奸被刑拘。来源中国长安网来看通报的全文针对网络举报的吴某凡多次诱骗年轻女性发生性关系等有关情吴亦凡社交账号全部被封,难道强奸罪已经坐实?自从7月31号,北京朝阳警方发微博消息,吴亦凡因涉嫌强奸罪,已被依法刑事拘留之后,紧接着在8月1号也就是昨天晚上的时候,吴亦凡和吴亦凡工作室的微博已经被注销了,当然除了微博账号之外吴亦凡被拘引争议强奸罪一般很难定性,吴亦凡很可能有惊无险?吴亦凡被拘引争议强奸罪一般很难定性,吴亦凡很可能有惊无险?一种观点认为,吴亦凡因涉嫌强奸罪被拘,这要看警方掌握的证据够不够充分了,像这种案情,在事发后立刻报警还好,时间长了警方调查1986年婆婆侵犯儿媳案实录,女性侵犯女性到底算不算强奸罪?最近有件占据公共资源很久讨论度很大的事情,起初是娱乐圈的吃瓜事件,后来逐渐演变成了需要司法介入的公众事件,社会影响力很大。这件事情是什么想必大家应该都有所耳闻。警方介入调查后,也很秒竟然是比光年还要大?来看看宇宙中的计量单位现代科学,几乎每个研究角落都有物质需要去计量,每个领域也都有自己的计量单位。想要入门一个领域,自然要先看懂在这个世界,那些奇怪的字母和符号都代表什么。今天梧桐就带大家一起认识一下,戴口罩指引和重点场所重点单位重点人群防护指南修订了!公众和重点职业人群戴口罩指引(2021年8月版)和重点场所重点单位重点人群新冠肺炎疫情常态化防控相关防护指南(2021年8月版)有关问题解答针对当前疫情防控形势和人群流行特征,国家
邮票上的军史祝贺八一建军节每年的8月1日为八一建军节,是中国人民解放军建军纪念日。八一建军节诞生于1933年,她的第一个节日庆祝活动是在中央苏区首府江西瑞金举行的。1933年6月26日,中共苏区中央局发出了日本集邮家安藤裕先生的黑便士邮集欣赏文集邮博物馆前些日子,日本英国切手研究会寄来了几期今年的会刊,其中有一期(2021年3月出版的第235期)刊登了日本集邮家安藤裕先生(HIROSHIANDO)的黑便士邮集的部分展片造谣袁隆平对转基因的态度,你还不够资格最近看见某自媒体发表网民admin写的一篇不伦不类的评论,对袁隆平先生的意见予以曲解造谣,字里行间充满了极度偏见。这是他预设立场,戴着有色眼镜对袁隆平的话进行了歪解。众所周知,袁隆研究转基因的人,自己吃不吃?这类提问,我懒得回复转基因从研究上市需要多少年?吴孔明院士至少20年以上2013年10月21日,吴孔明院士表示,转基因若存在风险,就不能上市,若没有风险,我们为什么不能使用这种技术?我家吃的油就是转基2008年雪灾,广州火车站面临的一场惊心大决战在多年的春运经历当中,广州火车站遭遇了两次客流急剧增加的大事件。1998年春运时正逢湖南大雪,北上线路被断,广深线塌方又使得南下列车无法通行,数十万乘客滞留广州火车站广场。好在3天斯诺登揭秘过转基因吗?评转基因专家极力回避的问题如果没有转基因,地球上还都是类人猿。近期看见一位老朋友,网名叫做zhenyam铭悦的人发表了一篇文章,标题叫做转基因专家极力回避的问题。题目起得很是有气魄,说得好像他本人认识转基因澳洲开飞英美亚洲,新增第三国返澳对于大家来说,澳洲国境只是模糊有个时间线,可能在1112月开启,但是一直都没有一个准确时间。这个时间今天来了!刚刚,每日邮报报道,澳航消息来了!12月18日起重启国际航班,届时,澳今天是世界卫生日文张华东今天(4月7日)是世界卫生日(WorldHealthDay,也有人翻译成世界健康日),是1948年成立的世界卫生组织(WHO)的周年纪念日。世卫组织每年都为世界卫生日选定一美国每小时再次报告1000多例新的新型冠状病例根据美国媒体报道,翰霍普金斯大学截至周三的一周数据的分析,美国每小时再次报告1000多例新的冠状病毒感染。全国平均每天约有25,300例新发病例,比6月22日当周的每天11,300外星人真的有人见过吗?当年震惊世界的UFO三大事件,真假难辨在地球之外是否有外星人,人们看到的ufo真相到底是什么?凤凰城事件,罗斯维尔事件,伦德山接触事件,他们的真相到底是什么?今天就给大家说说纪录片ufo。1997年在美国的利亚桑纳州凤您知道世界著名的五大邮集都是哪些吗?文张华东去年笔者在给亚洲邮学家读者群和沙鱼涌邮史俱乐部讲英国皇家邮学会150年风云史时,曾提及了乔治五世的皇家邮集(TheRoyalPhilatelicCollection),皇家