Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在旧代码中使用可靠的原则实现新特性_Java_Oop_Design Patterns_Solid Principles - Fatal编程技术网

Java 在旧代码中使用可靠的原则实现新特性

Java 在旧代码中使用可靠的原则实现新特性,java,oop,design-patterns,solid-principles,Java,Oop,Design Patterns,Solid Principles,我只是想更多地了解SOLID原则,但在我的旧代码(而不是SOLID)中实现新的结构会让我陷入困境 我有这个房间。班级 public class Room { private String roomCode; private String roomDescription; // getter/setter } 现在我需要翻译roomDescription。我开始创建一个界面 public interface ITranslation { String findT

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

我有这个
房间。班级

public class Room {
   private String roomCode;
   private String roomDescription;
   // getter/setter
}
现在我需要翻译
roomDescription
。我开始创建一个
界面

public interface ITranslation {    
    String findTranslation();    
}
以及
实现

public class RoomDescriptionTranslation implements ITranslation {

@Override
public String findTranslation() {
    return "translated Room";
}
在已经存在的代码中有一个服务类,它创建了一些带有
代码和
说明的
房间。这些
房间
也在视图中使用(作为jsp bean)

新的要求是在视图上有经过翻译的描述

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

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

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

我会创建一个模型
TranslatedRoom Extendes Room
仅用于查看此实体中的L,并且在新模型中会考虑转换

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


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

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

对于属性p和类C,p是C的属性吗?

所以,在你的例子中,问题变成了:翻译是房间的属性吗?从语义上讲,听起来不是

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

描述这门课的单个单词或短语是什么?

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

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

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

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

  • 同样,可能还有其他因素影响整个事件

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


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

    包围,正如我所理解的,如果您添加翻译逻辑,您将添加翻译逻辑,那么一个类将承担两项责任。到目前为止,它还没有“单一责任”。因此,如果您需要创建一个新类并做一些有益的事情,或者只是懒洋洋地添加到现有类中,您可以在此处接听电话。是否要使用文件室的代码查找说明文本?@SME\u Dev我已经有了说明。但是需要翻译它,也需要翻译对视图的描述。(也可能超越现有类型)我不会创建任何新类型,而是将所需的功能添加到RoomFactory或已经存在的任何服务类中。我会将
    描述
    重构为一个新类型,到目前为止,它肯定不像
    字符串
    那么简单。并以新类型处理所有翻译。对不起,它不依赖于国际化。有一个房间描述,如
    “豪华房”
    ,应该用另一种方式翻译。不是语言。