【问题标题】:Having inner classes and interfaces in Data class of Kotlin is best practice or not在 Kotlin 的 Data 类中拥有内部类和接口是否是最佳实践
【发布时间】:2020-02-25 05:29:44
【问题描述】:

我有一个数据类,它是一个房间实体,代码如下

@Entity(tableName = "request")
data class Request(
@PrimaryKey
var id: Int,
var name: String,
var date: String,
var requestTime: String,
var deliveryTime: String,
var distanceCovered: String
){
interface OnClickListener{
    fun onClick(request: Request)
}

class Adapter(
    private val requests: List<Request>,
    private val requestsFor: Int,
    private val listener: Request.OnClickListener
) : RecyclerView.Adapter<Adapter.ViewHolder>() {

    companion object{
        const val REQUESTS_FOR_SEND = 0
        const val REQUESTS_FOR_ONGOING = 1
        const val REQUESTS_FOR_COMPLETED = 2
    }

    class ViewHolder(
        var recyclerViewRequestBinding: RequestBinding
    ) : RecyclerView.ViewHolder(recyclerViewRequestBinding.root)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
        ViewHolder(
            DataBindingUtil.inflate(
                LayoutInflater.from(parent.context),
                R.layout.request,
                parent,
                false
            )
        )

    override fun getItemCount() = requests.size

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val request = requests[position]
        holder.recyclerViewRequestBinding.request = request
        when(requestsFor){
            REQUESTS_FOR_COMPLETED ->{
                holder.itemView.request_date.hide()
                holder.itemView.request_delivery_time.show()
                holder.itemView.request_distance_covered.show()
            }
        }
        holder.itemView.setOnClickListener { listener.onClick(requests[position]) }
    }
}
}

在这里你可以看到Request 是一个Room 实体,它有它的内部类Adapter 和接口OnClickListener 在实体中包含这些东西是一个好习惯,如果这是一个坏习惯那么最佳做法是什么?

【问题讨论】:

    标签: android android-studio kotlin inner-classes android-mvvm


    【解决方案1】:

    根据SOLID 规则,每个类都应该有单一的职责。您可以将 ViewHolder 设为 Your Adapter 的内部类。接口和实体应该分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-07
      • 2010-12-28
      • 2013-11-18
      • 2021-11-06
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多