RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1398280
Accepted
Kurtca Bain
Kurtca Bain
Asked:2022-09-08 18:43:22 +0000 UTC2022-09-08 18:43:22 +0000 UTC 2022-09-08 18:43:22 +0000 UTC

在 MVVM 应用程序中将字符串常量存储在哪个类中?

  • 772

我正在 kotlin 上为 Android 编写一个应用程序“天气”。应用程序架构 - MVVM。我使用 Yandex API 获取天气数据。有 dto 类 ForecastModel 和 FactModel。FactModel 类的条件字段以字符串格式(“部分多云”、“连续大雨”等)从服务器接收有关天气状况的数据。我想将这些字符串本地化为俄语和英语。为此,我创建了 getConditionLocalized() 方法并将字符串放入资源中。但最终,它生成的不是字符串,而是数字。我知道常量和 getConditionLocalized() 函数很可能都必须在另一个类中,并且很可能需要通过 resources.getString(R.string.....) 方法调用它们,但该方法不可用在这堂课中。唯一的问题是,将所有这些放在哪个班级?在存储库中,查看模型或其他?您能告诉我如何根据 MVVM 模型正确实现它吗?

ForecastModel 和 FactModel 类的代码:


import com.company.myweatherapp.R

const val CLEAR = "clear"
const val PARTLY_CLOUDY = "partly-cloudy"
const val CLOUDY = "cloudy"
const val OVERCAST = "overcast"
const val DRIZZLE = "drizzle"
const val LIGHT_RAIN = "light-rain"
const val RAIN = "rain"
const val MODERATE_RAIN = "moderate-rain"
const val HEAVY_RAIN = "heavy-rain"
const val CONTINUOUS_HEAVY_RAIN = "continuous-heavy-rain"
const val SHOWERS = "showers"
const val WET_SNOW = "wet-snow"
const val LIGHT_SNOW = "light-snow"
const val SNOW = "snow"
const val SNOW_SHOWERS = "snow-showers"
const val HAIL = "hail"
const val THUNDERSTORM = "thunderstorm"
const val THUNDERSTORM_WITH_RAIN = "thunderstorm-with-rain"
const val THUNDERSTORM_WITH_HAIL = "thunderstorm-with-hail"


data class ForecastModel(
    val fact: FactModel?,
    val geo_object: GeoObjectModel?
)

data class FactModel(
    val temp: Int,
    val icon: String,
    val condition: String
) {
    fun getConditionIcon(): String {
        return "https://yastatic.net/weather/i/icons/funky/dark/$icon.svg"
    }

    fun getConditionLocalized(): String {
        return when (condition) {
            CLEAR -> R.string.clear_conditions_text.toString()
            PARTLY_CLOUDY -> R.string.partly_cloudy_conditions_text.toString()
            CLOUDY -> R.string.cloudy_conditions_text.toString()
            OVERCAST -> R.string.overcast_conditions_text.toString()
            DRIZZLE -> R.string.drizzle_conditions_text.toString()
            LIGHT_RAIN -> R.string.light_rain_conditions_text.toString()
            RAIN -> R.string.rain_conditions_text.toString()
            MODERATE_RAIN -> R.string.moderate_rain_conditions_text.toString()
            HEAVY_RAIN -> R.string.heavy_rain_conditions_text.toString()
            CONTINUOUS_HEAVY_RAIN -> R.string.continuous_heavy_rain_conditions_text.toString()
            SHOWERS -> R.string.showers_conditions_text.toString()
            WET_SNOW -> R.string.wet_snow_conditions_text.toString()
            LIGHT_SNOW -> R.string.light_snow_conditions_text.toString()
            SNOW -> R.string.snow_conditions_text.toString()
            SNOW_SHOWERS -> R.string.snow_showers_conditions_text.toString()
            HAIL -> R.string.hail_conditions_text.toString()
            THUNDERSTORM -> R.string.thunderstorm_conditions_text.toString()
            THUNDERSTORM_WITH_RAIN -> R.string.thunderstorm_with_rain_conditions_text.toString()
            THUNDERSTORM_WITH_HAIL -> R.string.thunderstorm_with_hail_conditions_text.toString()
            else -> condition
        }
    }
}

data class GeoObjectModel(val locality: LocalityModel)

data class LocalityModel(val name: String)```
android
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Романыч
    2022-09-09T03:19:02Z2022-09-09T03:19:02Z

    getConditionLocalized()其他所有内容都需要在映射器中进行映射。Mapper这是一个将一个模型转换为另一个模型的类,仅此而已。好吧,启动某种 enam 线程是正确的 -ENUM在其中列出所有天气,并在映射器中解决它。映射器将需要提供者上下文之类的东西。匕首之类的东西在这里会有所帮助。日期类不适用于逻辑。大约你应该有这样的方案=你从服务器远程获取模型,映射器重新映射它们并进行所有转换,输出是另一个具有准备数据的模型。(类似于ModelRemote-> map ModelLocal-> map->ModelUi也就是说,有几层模型。至少。MVVM 与它无关。这里看看Clean Architecture就明白了。视图模型是一个 UI 层,一切准备就绪都应该来自数据层。此外,您的字符串会toString 无缘无故地被带到脑海中。

    • 1

相关问题

  • 来自片段的列表落后于 BottomNavigationView

  • 无法将变量从 Activity 传递到 Fragment

  • 构建与完成的片段略有不同的片段的最佳方法是什么?

  • 如何更改来自服务器的响应中的日期格式?

  • 谷歌地图在应用程序的发布版本中不起作用

  • 材料设计按钮。单击按钮上的可选区域!

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5