【发布时间】:2026-01-12 05:25:01
【问题描述】:
我目前正在学习将我凌乱的代码拆分为 DDD(注意,学习)范式。实体(IEntity,IUser)是域层由接口组成,然后在数据层(BaseEntity,User)实现。通过存储库模式访问数据。但正如我为IUserRepository 定义的返回IUser,在数据层我必须手动将它User 转换回IUser 以匹配返回签名。
如何避免强制转换?谢谢。
域层
interface IEntity
{
var id: Long?
var name: String?
}
interface IUser : IEntity
{
}
interface IBaseRepository<T: IUser>
{
fun get(id: Long): Observable<T?>
}
interface IUserRepository : IBaseRepository<IUser>
{
}
数据层
abstract class BaseEntity() : IEntity
{
@SerializedName("id")
override var id: Long? = null
@SerializedName("full_name")
override var name: String? = null
}
class User() : BaseEntity(), IUser
{
}
interface UserRetrofitApi
{
@GET("user/{uuid}/")
fun get(id: Long): Observable<User?>
}
class UserRepository(private val _api: UserRetrofitApi) : IUserRepository
{
override fun get(id: Long): Observable<IUser?> {
return _api.get(id) as Observable<IUser?> // How to avoid casting here without resorting to generic UserRepository<T: IUser>
}
}
【问题讨论】:
-
UserRetrofitApi::get有什么特殊限制吗?如果没有,只需将其更改为fun get(id: Long): Observable<IUser?>。 -
@glee8e,请参阅下面的回复。
标签: generics inheritance kotlin