gpt4 book ai didi

Typescript - 开闭原则

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:21 24 4
gpt4 key购买 nike

我想在我的“小”项目中使用 OCP 规则。实际上我在实现这个问题时遇到了问题。让我告诉你我写了什么。

abstract class AnimationType {
public abstract createAnimation(timing: number): { in: string, out: string };
}

class FadingAnimation extends AnimationType {
public createAnimation(timing: number): { in: string, out: string } {
return { in: 'opacity: 0', out: 'opacity: 1' }
}
}

class TransformAnimation extends AnimationType {
public createAnimation(timing: number): { in: string, out: string } {
return { in: 'transform: translateX(-100%)', out: 'transform: translateX(100%)' }
}
}

class AnimationCreator {
private timing: number;

constructor(time: number) {
this.timing = time;
}

getAnimation(animation: AnimationType): { in: string, out: string } {
return animation.createAnimation(this.timing);
}
}

我写的好吗?如果我这样做了,那我究竟得到了什么?如果我想添加这个动画,我需要发送 FadingAnimation 类的对象。如果我想要转换动画,我需要发送 TransformAnimation 类的对象 - 所以我必须在某个地方使用 switch(this.animationType)。

最佳答案

原则和模式绝对可以在语言之间转移。当您跨越范式的界限时,它们可能不太适用。 SOLID 原则和 OOP 模式适用于任何面向对象,而不仅仅是 Java。

请记住,TypeScript/JavaScript 不仅仅是面向对象的。

从问题开始

问题不在于您试图借鉴来自其他语言的原则。这里的问题是您试图从原理开始。

良好的代码设计,无论您使用什么范式,都始于您想要解决的问题。在寻找模式或应用原则之前编写更多代码,这样设计就可以从您在应用程序增长时发现的实际问题中浮现出来。

从原则开始,您就过早地决定问题最终可能是什么;并且您的设计可能会使您离整洁代码的目标更远。

模式和原则具有高度可移植性,但请等待出现问题的信号,而不是过早地应用一些解决方案。

越简单越好

在你的情况下,你可以用最简单的方法解决问题。如果您有测试来指导您,您可以稍后轻松更新实现细节。

也许在您的情况下,一个简单的字典/对象就足够了。

const animationType = {
fading: {
in: 'opacity: 0',
out: 'opacity: 1'
},
transforming: {
in: 'transform: translateX(-100%)',
out: 'transform: translateX(100%)'
}
};

如果你不想强制执行 fadingtransforming,你可以输入这个来允许任何键 - 但你不需要添加这种灵 active :

interface AnimationTypes {
[key: string]: { in: string, out: string };
}

关于Typescript - 开闭原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49993793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com