我目前正在學習將我的雜亂代碼拆分爲DDD(注意,學習)範例。實體(IEntity
,IUser
)是域層由接口組成,然後在數據層(BaseEntity
,User
)實現。通過存儲庫模式訪問數據。但正如我所定義的IUserRepository
返回IUser
,在數據層我必須手動將它User
回到IUser
以匹配返回簽名。Kotlin繼承
我該如何避免鑄造?謝謝。
領域層
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'如果沒有的話。 –
glee8e
@ glee8e,看到我下面的回覆。 – DeuS