Java 如何在没有不必要的变量的情况下对实体建模以节省内存并减少数据库调用?

Java 如何在没有不必要的变量的情况下对实体建模以节省内存并减少数据库调用?,java,database,oop,clean-architecture,Java,Database,Oop,Clean Architecture,我最近读到了有关Clean架构的文章,我正在尝试为实体创建类 让我们以YouTube为例。当我想显示YouTube频道的名称和订户数量时(例如,当查看订阅列表时),我的类如下所示: 类频道{ 私有字符串名称; 私有整数订阅计数; 私人名单视频; } 类视频{//关于视频的数据变量} 我遇到的问题是,每当我想从数据库中获取频道数据以创建频道实体时,该频道实体必须包含属于该频道的所有视频。但我不需要显示YouTube频道的视频列表,因此最好不要从数据库中检索视频信息。(查看200个订阅频道的列表,

我最近读到了有关Clean架构的文章,我正在尝试为实体创建类

让我们以YouTube为例。当我想显示YouTube频道的名称和订户数量时(例如,当查看订阅列表时),我的类如下所示:

类频道{
私有字符串名称;
私有整数订阅计数;
私人名单视频;
}
类视频{//关于视频的数据变量}
我遇到的问题是,每当我想从数据库中获取频道数据以创建频道实体时,该频道实体必须包含属于该频道的所有视频。但我不需要显示YouTube频道的视频列表,因此最好不要从数据库中检索视频信息。(查看200个订阅频道的列表,每个频道有1000个视频=200000个我不使用的视频对象)


我如何建模我的类以确保每个类都只有我需要的信息(这样我就不会浪费内存和db调用?我想(1)将
视频设置为null,或者(2)创建一个没有
视频
变量的新类,或者(3)仅存储视频的ID,使变量具有一种类型的
列表

您可以创建一个
频道
类,如下所示:

public class Channel {
    private String name;
    private int subscriberCount;
    private List<Video> videos;

    public Channel(String name, int subscriberCount) {
        this.name = name;
        this.subscriberCount = subscriberCount;
        this.videos = new ArrayList<>();
    }

    public List<Video> getVideos() {
        return videos;
    }

    public void setVideos(List<Video> videos) {
        this.videos = videos;
    }

    public String getName() {
        return name;
    }

    public int getSubscriberCount() {
        return subscriberCount;
    }

}

public class Video { // data variables about Video };
公共类频道{
私有字符串名称;
私有整数订阅计数;
私人名单视频;
公共频道(字符串名称,int subscriberCount){
this.name=名称;
this.subscriberCount=subscriberCount;
this.videos=new ArrayList();
}
公共列表getVideos(){
返回视频;
}
公共视频(列出视频){
这个。视频=视频;
}
公共字符串getName(){
返回名称;
}
public int getSubscriberCount(){
返回订阅计数;
}
}
公共类视频{//关于视频的数据变量};
通过在构造函数中创建视频的
列表
,但不添加到
列表
,除非执行
setVideos
方法,否则在执行
getVideos
方法时,将永远不会得到空响应

您将得到一个空的
列表

频道实体必须包含属于该频道的所有视频

不可以。您也可以在没有视频的情况下定义
频道

class Channel {
  private String name;
  private int subscriberCount;
}
并通过自己的
视频存储库
获取
视频

interface VideoRepository {
    public List<Video> getChannelVideos(Channel channel);
}
接口视频存储库{
公共列表获取频道视频(频道);
}
然后,您可以完全控制视频加载和内存消耗

您还可以将分页添加到存储库中

interface VideoRepository {
    public List<Video> getChannelVideos(Channel channel, int offset, int size);
}
接口视频存储库{
公共列表getChannelVideos(频道、整数偏移、整数大小);
}

<代码> >您的通道类是好的。只要在构造函数中设置名称和订阅者计数,并使用SET方法来设置视频列表。这样,您的代码就决定了您是否需要视频列表。@ Gilbert Le Blanc,我担心我偶然尝试检索视频,但对于某些通道,它总是空的,在软件开发中,T。他的答案是:这取决于。在你的情况下,这取决于你需要对视频列表做什么。例如,你必须从服务器向客户端发送
Channel
对象吗?