【问题标题】:Is this a violation of the single responsibility principle (SRP)这是否违反了单一责任原则 (SRP)
【发布时间】:2020-02-26 12:20:38
【问题描述】:

getSummarygetMovementType 方法是否因为知道太多 (Context) 而违反了 SRP?这些方法用于RecyclerView.Adapter

abstract class Movement(
    val movementId: Int = 0,
    val created: Date = Date(),
    val createdBy: String = "",
    val movementActive: String = Constants.ACTIVE,
    var quantity: Double = 0.0,
    var material: Material = Material()
) {
    abstract fun getSummary(context: Context): String
    abstract fun getMovementType(context: Context): String
}


data class Entry(
    val id: Int = 0,
    var observation: String = "",
    var warehouse: Warehouse = Warehouse()
) : Movement() {

    override fun getSummary(context: Context) =
        context.getString(R.string.title_warehouse) + ": ${warehouse.name}. " +
        context.getString(R.string.title_material) + ": ${material.name}. " +
        context.getString(R.string.quantity) + ": $quantity. " +
        context.getString(R.string.observation) + ": $observation. " +
        context.getString(R.string.user) + ": $createdBy"

    override fun getMovementType(context: Context) = context.getString(R.string.title_entry)
}

【问题讨论】:

  • 这个问题将根据意见得到答案,这与堆栈溢出无关,您最好在另一个社区提出这个问题

标签: android kotlin single-responsibility-principle


【解决方案1】:

不,它没有。

无论哪种方法知道(在您的情况下是上下文),SRP 都将“承担单一责任”。

我看到您的方法仅从上下文返回一些值。不要让他们做任何其他事情(例如,将某些内容设置到某处或将某些内容发送到某处)并且您遵循 SRP

【讨论】:

  • 不同意,考虑到适配器是负责显示此数据的组件这一事实,此方法可以轻松地放在适配器而不是模型中。这个类现在负责数据的传输以及知道如何显示它
  • 顺便说一下适配器列表的类型是Movement,当然还有很多子类,每个子类显示不同的信息。
  • @a_local_nobody 问题是“方法是否违反了 SRP?”。好吧,方法不行。没有关于班级责任的问题
  • 我想这很公平 :) 方法本身没有,但我不同意将它们包含在模型中
  • @a_local_nobody 同意你的观点,但这不是问题的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多