【问题标题】:Implementing new feature using SOLID principles in old code在旧代码中使用 SOLID 原则实现新功能
【发布时间】:2016-12-14 09:27:26
【问题描述】:

我只是尝试更多地了解SOLID 原则,但在我的旧(不是SOLID)代码中实现新结构时遇到了困难。

我有这个Room.Class

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

现在我需要翻译roomDescription。我开始创建interface

public interface ITranslation {    
    String findTranslation();    
}

还有一个implementation

public class RoomDescriptionTranslation implements ITranslation {

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

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

新的要求是在视图上有翻译后的描述。

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

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

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

【问题讨论】:

  • 据我了解,如果您添加翻译逻辑,您就是添加翻译逻辑,那么一个类有两个职责。到目前为止,它还没有“单一责任”。因此,如果您需要创建一个新课程并做一些好事,或者只是懒惰并添加到现有课程中,您可以在这里接听电话。
  • 您想使用房间代码查找描述文本吗?
  • @SME_Dev 我已经有了描述。但是需要它的翻译,也需要视图上的翻译描述。 (也可以覆盖现有的)
  • 我不会创建任何新类型,而是将所需的功能添加到 RoomFactory 或任何已经存在的服务类。
  • 我会将description 重构为一种新类型,它肯定不像现在的String 那样简单。并处理新类型的所有翻译。

标签: java oop design-patterns solid-principles


【解决方案1】:

这可能是第一个或第三个选项,但在我看来不是第二个选项。我认为一个重要的问题,一般来说设计任何类是这样的:

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

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

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

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

这涉及到 OOP 中的类以及 SOLID 中的 S 的概念。有一次,您提出这个问题并且可以为您的班级描述一个单一目的,然后您可以返回并询问第一个问题,某个属性是否属于这个班级。

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

考虑到这一切,我更倾向于拥有一种新的翻译服务

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

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

【讨论】:

    【解决方案2】:

    我将创建一个模型 TranslatedRoom extends Room 仅用于从 SOLID 中查看此 L,并且在此新模型内部会处理翻译。

    当然,如果可以重构为视图等创建模型的服务。

    还有一件事(可能是 SOLID 中的 S)如果我们只需要在这个/这些视图中显示翻译的房间,这个想法很好。

    【讨论】:

      【解决方案3】:

      如果你想翻译文本,你应该使用 java 中已经存在的国际化解决方案。

      在您的解决方案中,您将产生痛苦的维护问题,并且您将返回的每个字符串都将被 if 包围。

      【讨论】:

      • 对不起,它不依赖于国际化。有像"deluxe Room" 这样的房间描述,应该用另一种方式翻译。不是语言。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多