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或已经存在的任何服务类中。我会将描述
重构为一个新类型,到目前为止,它肯定不像字符串
那么简单。并以新类型处理所有翻译。对不起,它不依赖于国际化。有一个房间描述,如“豪华房”
,应该用另一种方式翻译。不是语言。