目前,我的架构是一个独立的模块,可以处理非常具体的任务。现在它需要推广。
现在,它处理一个请求和与其关联的所有进程(1个或多个)。有一个类Request和一个类Process,因为它有一个特定的任务,所以这个模型是可以的。
现在,我需要拆分两个类来实现模块化。例如,应该拆分Request类。因此,我仍然将有一个Request类,它保存一般请求信息,以及许多RequestDetailsForServiceOne、RequestDetailsForServiceTwo等,它们保存相对于特定类型请求的详细信息。同样适用于Process。
现在的问题是:如何将Request类与RequestDetailsForServiceOne (在运行时)绑定在一起?
我曾经考虑过依赖注入,但是RequestDetailsForServiceOne和RequestDetailsForServiceTwo没有任何共同的行为(类只存储一些属性),这种方式将驱动我编写一个完全为空的IRequestDetailsForService代码。对我来说这听起来像是一种暗号。
在本例中(在Request/Process类中)使用属性字典并完全避免使用RequestDetailsForService*类会更好吗?我真的不喜欢这样失去打字检查就能把我弄回来。什么是理想的解决方案?
发布于 2021-11-09 17:57:43
基本上,你有两种方法可以互相称赞,但它们有不同的机制。
在开始之前,必须定义目标体系结构。您只是在单块应用程序中创建模块,还是实际上将其分解为微服务?
显然有更多的事情要考虑,但这些会让你朝着正确的方向思考。
Strangler方法基本上让您构建要迁移到的新东西,然后让您的遗留代码开始使用它而不是遗留代码。
以我学到的那本书命名的,是一种探索从无政府状态到秩序的步骤的方法。它将版本控制作为一个促进器,当您陷入困境时,它会让您回滚或放弃分支。
一般的做法是这样的:
在分解遗留代码时,您很可能需要这样做,遗留代码被您在Strangler方法中创建的新东西所替代。
发布于 2021-10-08 14:21:03
您可以使用“封装”方法将其模块化,而不是“继承”。
只有过程需要细节,所以它应该去序列化那里的细节。
因此,您应该像往常一样有一个Request,但是接下来是一个ProcessSpecificData字符串(或byte[])字段。
这将使您的进程与请求处理程序模块完全解耦。
让进程反序列化“所有”数据可能会更好。这将进一步使进程解耦。Request将进行足够的反序列化以路由到正确的进程,但随后它将简单地传递该进程一个字符串(或byte[]数组)。
有了这个级别,进程就有可能直接独立运行,这对于测试来说是很好的。
https://softwareengineering.stackexchange.com/questions/235374
复制相似问题