首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把整体架构变成模块化的东西

把整体架构变成模块化的东西
EN

Software Engineering用户
提问于 2014-04-09 10:48:04
回答 2查看 237关注 0票数 -1

目前,我的架构是一个独立的模块,可以处理非常具体的任务。现在它需要推广。

现在,它处理一个请求和与其关联的所有进程(1个或多个)。有一个类Request和一个类Process,因为它有一个特定的任务,所以这个模型是可以的。

现在,我需要拆分两个类来实现模块化。例如,应该拆分Request类。因此,我仍然将有一个Request类,它保存一般请求信息,以及许多RequestDetailsForServiceOneRequestDetailsForServiceTwo等,它们保存相对于特定类型请求的详细信息。同样适用于Process

现在的问题是:如何将Request类与RequestDetailsForServiceOne (在运行时)绑定在一起?

我曾经考虑过依赖注入,但是RequestDetailsForServiceOneRequestDetailsForServiceTwo没有任何共同的行为(类只存储一些属性),这种方式将驱动我编写一个完全为空的IRequestDetailsForService代码。对我来说这听起来像是一种暗号。

在本例中(在Request/Process类中)使用属性字典并完全避免使用RequestDetailsForService*类会更好吗?我真的不喜欢这样失去打字检查就能把我弄回来。什么是理想的解决方案?

EN

回答 2

Software Engineering用户

发布于 2021-11-09 17:57:43

基本上,你有两种方法可以互相称赞,但它们有不同的机制。

步骤1:定义成功是什么样子的

在开始之前,必须定义目标体系结构。您只是在单块应用程序中创建模块,还是实际上将其分解为微服务?

  • 定义您需要的模块/服务
  • 定义您所具有的任何定性需求(即必须处理X请求/秒)
  • 澄清授权责任

显然有更多的事情要考虑,但这些会让你朝着正确的方向思考。

策略: Strangler方法

Strangler方法基本上让您构建要迁移到的新东西,然后让您的遗留代码开始使用它而不是遗留代码。

策略:天皇法

以我学到的那本书命名的,是一种探索从无政府状态到秩序的步骤的方法。它将版本控制作为一个促进器,当您陷入困境时,它会让您回滚或放弃分支。

一般的做法是这样的:

  1. 决定你想要的重构。
  2. 尝试对新分支进行重构。
  3. 如果成功,则合并更改。
  4. 如果更改变得过于普遍或困难,请确定阻止程序并将其作为必要的步骤添加。
    1. 放弃失败的分支(删除它)
    2. 先重新开始新的一步。

在分解遗留代码时,您很可能需要这样做,遗留代码被您在Strangler方法中创建的新东西所替代。

票数 1
EN

Software Engineering用户

发布于 2021-10-08 14:21:03

您可以使用“封装”方法将其模块化,而不是“继承”。

只有过程需要细节,所以它应该去序列化那里的细节。

因此,您应该像往常一样有一个Request,但是接下来是一个ProcessSpecificData字符串(或byte[])字段。

这将使您的进程与请求处理程序模块完全解耦。

让进程反序列化“所有”数据可能会更好。这将进一步使进程解耦。Request将进行足够的反序列化以路由到正确的进程,但随后它将简单地传递该进程一个字符串(或byte[]数组)。

有了这个级别,进程就有可能直接独立运行,这对于测试来说是很好的。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/235374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档