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

How to model entities without unneeded variables to save memory and reduce db calls?

我最近阅读了有关 Clean Architecture 的内容,我正在尝试为实体创建 classes。

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

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

class Video { // data variables about Video }

我遇到的问题是,每当我想从数据库中获取频道数据以创建频道实体时,频道实体必须包含属于该频道的所有视频。但是我不需要显示 YouTube 频道的视频列表,所以最好不要从数据库中检索视频信息。 (查看包含 200 个订阅频道的列表,每个频道有 1000 个视频 = 200,000 个我不使用的视频对象)

如何为我的 class 建模以确保每个 class 只包含我需要的信息(这样我就不会浪费内存和数据库调用?我正在考虑 (1 ) 将 videos 设置为 null,或 (2) 创建一个没有 videos 变量的新 class,或 (3) 仅存储视频的 ID,使变量的类型为List<int>.

您创建了一个如下所示的 Channel class:

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 };

通过在构造函数中创建 List 视频,但不添加到 List 除非你执行 setVideos 方法,你永远不会得到空响应当你执行 getVideos 方法。

你会得到一个空的 List

the Channel entity must contain all the videos that belong to the channel

一定不会。您还可以定义没有视频的 Channel

class Channel {
  private String name;
  private int subscriberCount;
}

并通过自己的 VideoRepository.

获取 Video
interface VideoRepository {
    public List<Video> getChannelVideos(Channel channel);
}

然后您就可以完全控制视频加载和内存消耗。

您还可以向存储库添加分页

interface VideoRepository {
    public List<Video> getChannelVideos(Channel channel, int offset, int size);
}