从域层我List<Point>
得到ViewModel
.
class Point(val lat: Double, lon: Double, titile: String)
在 ViewModel 中,您需要从中List<Point>
获取PolylineOptions
,为此我制作了一个映射器
interface PointsToPolylineMapper : Mapper<List<Point>, PolylineOptions>
并且有一个实现
class DefaultPointsToPolylineMapper @Inject constructor(val context: Context):
PointsToPolylineMapper {
override fun transform(value: List<Point>): PolylineOptions {
val polylineOptions = PolylineOptions()
val color = Color.parseColor("#24AEB6")
value.point?.map {
polylineOptions.add(LatLng(it.lat, it.lon))
}
polylineOptions.color(color)
return polylineOptions
}
}
polylineOptions.color(color)
- 它应该在映射器中还是在其他地方?映射器应该仅限于映射还是在映射器中有其他设置是否正常?
现在,例如,有必要允许用户手动调整线条的颜色和大小。好的,我保存了用户设置,但不清楚在哪里使用它们。
每个班级应该有一个责任。
我们
DefaultPointsToPolylineMapper
已经有了明确的责任。UserSettingsAwarePointsToPolylineMapper
添加这将是一个装饰器PointsToPolylineMapper
并且已经在ViewModel
预包装中使用它是有意义的DefaultPointsToPolylineMapper
。UserSettingsAwarePointsToPolylineMapper
必须首先调用他包装的那个,然后应用他的逻辑,即 获取已保存用户设置的值并应用于polylineOptions
. 为此,您必须UserSettingsAwarePointsToPolylineMapper
实现一个依赖服务UserSettingsService
,这将允许您获取设置。有一个替代方案。Create
ParametrizedPointsToPolylineMapper
,其厚度和颜色在映射器实例化时设置。接下来,我们在 中不使用固定映射器ViewModel
,而是使用 动态创建它UserSettingsAwarePointsToPolylineMapperProvider
。