首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从客户端角度看不同的组合技术

从客户端角度看不同的组合技术
EN

Software Engineering用户
提问于 2021-04-04 23:15:30
回答 1查看 106关注 0票数 -1

有不同的构图艺术/技巧,我将在下面介绍其中一些。

那么,问题是,除了我提出的技术之外,你还知道更多技术吗?

然后重要的问题是,从客户端的角度来看,what是不同的,我应该如何从客户端访问一个组合对象图,或者以另一种方式询问,在一个良好的面向对象的设计环境中,哪种组合技术对客户是友好的,这取决于德米特定律?

哪些其他依赖项可能存在,让我更多地进入该方向(使用组合A),以及如何进入另一个方向(使用组合B)。

我在示例中选择了扩展根对象的方法,which是,最初是客户端的行为used:

这个问题与那个问题有关:没有简单的神类重构

我有一个对象和一些方法

代码语言:javascript
复制
//also called MyObject1
class MyObject{
  
  ...

  doSomething1(){}
  doSomething2(){}

}

现在我想用更多的方法来扩展这个对象,例如,一个doSomething3,它作用于对象的状态,或者是某种“自己的”状态。

因此,现在有不同的想法,我如何能够做到这一点:

  • 将此方法+其所需的更多成员变量添加到现有类中
  • 创建一个新的类MyObject2并将其写到这个类中

如果我决定了安全的解决方案,那么问题是如何将 MyObjectMyObject2结合起来

  • 我可以将MyObject2集成到MyObject类MyObject { MyObject2 myObject2 =新的MyObject2(此)中.doSomething1(){} doSomething2(){}
  • 我可以让MyObject2独立,但问题是,客户端如何访问MyObject2,如果他能够访问MyObject
  • 第三类,它合并了另外两个类ThirdClass { MyObject myObject =新的MyObject() MyObject2 myObject2 =新的MyObject2(myObject) }

然后,The客户端在选项1)和选项3中具有以下可能性:

代码语言:javascript
复制
....myObject.getMyObject2().doSomething3();
....thirdClass.getMyObject2().doSomething3();

Edit (因为的解决方案对我的简单示例来说是一个微不足道的解决方案,但正确,但不涉及主要问题):

因此,假设我们有一个与MyObject3一样的MyObject2,它只依赖于MyObject1 (它是MyObject without the 1的同义词,以表明我在这里没有类型错误)和MyObject4.MyObject2-4不需要相互了解,因为它们只扩展了MyObject1的行为。

然后我有一个MyObject5,它直接依赖于MyObject1MyObject3

The的问题是一样的,我应该如何组合那个对象,才能从客户端访问所有这些对象的所有功能?这些对象中的哪个是根对象,我是否有一个充当根对象的“第三个”对象?

EN

回答 1

Software Engineering用户

发布于 2021-04-05 14:26:57

由于将MyObject重构为使用组合,因此对MyObject客户端的下游影响是双重的:

  1. There没有影响。重构是在MyObject内部进行的。MyObject的客户端可以并且应该继续调用他们用来调用的方法。这是重要的第一步,因为这减少了需要更改的文件数量。此时,您将把MyObject视为反腐败层的开始。
  2. Begin重构MyObject的客户端以使用MyObject 2.这不应该是一个巨大的重构工作。相反,将其划分为不同的任务,重点是重构一个类,甚至只是在一个类中重构一个方法。

为MyObject的客户端执行这两步重构工作可能允许您消除MyObject作为其他类的依赖项。最终,您将重构足够多的应用程序,以至于没有人调用刚刚传递给MyObject的MyObject2成员。此时,您可以从MyObject中删除这些传递方法。一旦MyObject2不再在MyObject内部使用,您就可以从MyObject内部消除MyObject2。

当您完成这个两步重构过程时,客户端将直接使用MyObject2,而不是传递给MyObject2的MyObject方法。

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

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

复制
相关文章

相似问题

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