XAML 如何维护下载列表(代码隐藏和UI)?[closed]

cu6pst1q  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(120)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以使用事实与引用来回答.

4天前关闭。
Improve this question
我目前正在构建一个应用程序,其中的主要目标是从他们的下载链接下载文件,很容易,不是吗?
这款应用在后台下载文件,并有一个专门的页面来显示当前的下载操作。但是,我不知道如何存储它,并提出了一些想法:

  • 有一个JSON文件,它存储了正在下载的内容及其当前状态(包括下载的字节数)的列表,每次有进展时都会重写该文件。这对我来说很糟糕,因为除了下载文件外,它还涉及到大量的读/写操作。
  • 直接在App类的List中存储Download Operations的列表,这样我就可以在任何时候使用(Application.Current as App).Downloads来检索它们。

我真的不知道什么是最好的方式来维护我的下载列表,并能够显示给最终用户,和/或从我的其他页面访问它。我还希望保持操作保存在某处,以便用户能够恢复操作以后。

cs7cruho

cs7cruho1#

假设您不打算 * 退出 * 应用程序,然后重新打开它,并且仍然可以看到进度,那么您的App类想法并不像您想象的那么糟糕,尽管我不会专门使用App类。
你所寻找的就是所谓的singleton。它是一种设计模式,有很多关于它的好文章。(如果你不熟悉它,可以从Wiki开始)。
通常,我建议创建一个类,并将其注册为依赖注入容器的单例(如果您不熟悉,请进一步阅读here)。如果您熟悉DI或觉得有冒险精神,我会将下载进度逻辑放置到注册为单例的DownloadManager类中。
如果你没有设置DI容器,你仍然可以使用静态来创建一个临时的单例类。一个常见的模式如下所示:

public class MySingleton
{
    private static MySingleton _instance;
    public static MySingleton Instance
    {
        get
        {
            _instance ??= new MySingleton();
            return _instance;
        }
    }

    private MySingleton()
    {
    }
}

这允许您在需要时通过调用MySingleton.Instance来访问MySingleton类的示例。
第一次调用Instance getter时,??=检查_instance是否为空,如果为空,则构造MySingleton的新示例,否则返回已经设置的值。
这确保了在应用程序的生命周期中只创建一个MySingleton示例。构造函数是私有的,这确保了实际 * 获取 * MySingleton示例的唯一方法是通过Instance属性,并承诺永远只会有一个示例。
您可以创建一个单独的DownloadManager,在其中存储活动下载的所有值,这些值可以通过访问DownloadManager.Instance随时获取和更新。
从技术上讲,这与您提到的App解决方案没有太大区别,但是它不会用下载代码污染您的App类,并且允许您保持下载管理器代码的独立性,您可以轻松地修改它并隔离测试它。

相关问题