CDI活动——如何在Open-close原则下归档成功
在这段视频中,你将学习如何使用CDI事件在Open-close原则下归档成功。
当我们谈论一个关于Java和OOP的良好设计时,可能首先想到的是SOLID原则;它带来了五个简单的步骤,或者至少是一个标志,如果代码是在正确的方向上。CDI肯定会帮助你按照正确的顺序来归档代码。今天,我们将解释如何利用CDI的优势,获得Open close原则。
如果你忘记了SOLID原则,不要担心,我们会把它放在这里,以记住SOLID的确实含义:
- 单一责任原则
- 开放-封闭原则
- 利斯科夫替代原则
- 接口隔离原则
- 依赖性反转原则
今天的CDI活动,我们将对开放-封闭原则进行归档。开放封闭原则是基于这样一句话。 "软件实体(类、模块、函数等)应该对扩展开放,但对修改封闭"。
这意味着我们可以添加新鲜的功能,因为我们并没有一直修改核心。为了清楚地说明这一点,我们将使用一个示例场景。
想象一下,一个记者将接收新闻,策划并在多个媒体上推广,如电视、媒体出版社、报纸、社交媒体等。
public class News implements Supplier<String> {
private final String value;
public News(String value) {
this.value = value;
}
@Override
public String get() {
return value;
}
@Override
public String toString() {
return "News{" +
"value='" + value + '\'' +
'}';
}
}
有了新闻实体,下一步就是创建媒体来发布这些新闻。为了简化第一步,我们将只提供杂志和报纸。
public class Magazine {
public void receive(News news) {
System.out.println("Publishing the news on magazine: " + news);
}
}
public class NewsPaper {
public void receive(News news) {
System.out.println("Publishing the newspaper: " + news);
}
}
完成后,我们就有了新闻和媒体来发布。这个过程的最后一步是创建接收信息并将其发布给现有媒体的人:记者。
@ApplicationScoped
public class Journalist {
@Inject
private Magazine magazine;
@Inject
private NewsPaper newsPaper;
public void publish(News news) {
magazine.receive(news);
newsPaper.receive(news);
}
}
是的,我们的演示开始工作了;然而,这段代码有什么问题呢?我们需要做什么?让我们设想一下,我们需要添加一个新的新闻类型,比如社会媒体。是的,创建一个类,再次修改《记者》,如果出现了,再修改一个。再一次修改记者,再一次。
所以每次出现新的媒体类型,我们都需要改变Journalist实体,所以我们的代码违背了开放-关闭的原则。
我们需要确保每次增加一个新的媒体类型时,我们都不会再修改Journalist。希望我们有设计模式来使我们的生活更容易,我们在这个资源库上有观察者模式。
CDI用事件来推广它,我们可以向多个观察者发射一个事件;因此,我们不再需要修改实体到新的媒体类型。事实上,实体甚至不知道谁会看这条新闻。它的工作只是策划,然后发布它。
在这段视频中,我们将探索CDI事件的力量,以及如何用它在你的代码上进行健壮和干净的代码设计,以存档成功。