gpt4 book ai didi

java - 在旧代码中使用 SOLID 原则实现新功能

转载 作者:行者123 更新时间:2023-11-30 10:35:27 26 4
gpt4 key购买 nike

我只是想更多地了解 SOLID 原则,但由于在我的旧(不是 SOLID)代码中实现新结构而陷入困境。

我有这个 Room.Class

public class Room {
private String roomCode;
private String roomDescription;
// getter/setter
}

现在我需要对 roomDescription 进行翻译。我开始创建一个接口(interface)

public interface ITranslation {    
String findTranslation();
}

和一个实现

public class RoomDescriptionTranslation implements ITranslation {

@Override
public String findTranslation() {
return "translated Room";
}

在已经存在的代码中有一个服务类,它创建一些带有codesdescriptionsRooms。这些 Rooms 也在 View 中使用(作为 jsp bean)。

新的要求是在 View 上有翻译的描述。

所以对我来说,问题是我应该在哪里实现现有 Rooms 的翻译逻辑。

  • 我应该在创建 Rooms 的现有服务类中实现它吗?
  • 或者 RoomDescriptionTranslation 应该是 Room 中的一个字段吗?
  • 或者我应该创建一个新的服务类,只翻译描述吗?

只需要一个指向正确方向的指针。

最佳答案

它可能是第一或第三个选项,但我认为不是第二个选项。我认为一个重要的问题,通常对于设计任何类都是这样的:

对于属性 p 和类 CpC 的属性吗?

因此,在您的情况下,问题变成了:翻译是 Room 的属性吗?从语义上讲,它听起来不是。

然后,您可以在 Room Service 类上问同样的问题。答案取决于您如何定义服务类别。同样,另一个有助于确定属性是否属于类的规则是:

描述此类的单个词或短语是什么?

这涉及到什么是 OOP 中的类以及 SOLID 中的 S。一次,您问这个问题并且可以描述您的类的一个单一目的,然后您可以返回并问第一个问题,某些属性是否属于这个类。

现在,如果您的服务类是“处理所有与房间相关的操作”(并不是说这是正确的,但如果是这样的话),那么您可以再添加一个操作,即翻译。但是,如果不是,那么您可以创建一个新服务,即翻译。

考虑到所有这些,我更倾向于拥有一个看起来像新的翻译服务

  1. 独立的东西
  2. 将易于扩展(与其他选项相比),例如添加更多语言
  3. 不需要更改现有代码

同样,可能还有其他因素会影响整个事情。

关于java - 在旧代码中使用 SOLID 原则实现新功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41138991/

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