Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 什么';这是在模块中公开方法的最佳实践_Android_Kotlin - Fatal编程技术网

Android 什么';这是在模块中公开方法的最佳实践

Android 什么';这是在模块中公开方法的最佳实践,android,kotlin,Android,Kotlin,我最近开始对我的person项目进行模块化,希望最终在允许的工作时间开始这样做,所以我花时间了解这方面的最佳实践 我的个人应用程序设计为在用户登录并与我的服务器同步后离线工作,因此我有一个模块结构应用程序,数据,本地,远程,数据同步和核心 显然,应用程序就是应用程序模块 数据将功能公开给应用程序,以便将来应用程序不会使用调用服务器的功能 本地是我的本地存储,主要是DAOs和类型转换器 远程是我的网络服务 DataSync同时使用远程和本地,并处理数据与数据库的同步 核心只是模块之间的模型/通用方

我最近开始对我的person项目进行模块化,希望最终在允许的工作时间开始这样做,所以我花时间了解这方面的最佳实践

我的个人应用程序设计为在用户登录并与我的服务器同步后离线工作,因此我有一个模块结构<代码>应用程序,
数据
本地
远程
数据同步
核心

显然,应用程序就是应用程序模块

数据将功能公开给
应用程序
,以便将来应用程序不会使用调用服务器的功能

本地是我的本地存储,主要是DAOs和类型转换器

远程是我的网络服务

DataSync同时使用远程和本地,并处理数据与数据库的同步

核心只是模块之间的模型/通用方法

在进入功能模块化之前,我想确保这些模块都正确完成。我开始“正确”处理的唯一模块是远程模块。远程模块由隐藏在所述存储库接口后面的存储库组成,以避免将实现/网络服务暴露给实现远程模块的模块。这些看起来有点像这样的大部分


interface RemoteJobsRepository {

    suspend fun updateJob(
        patchJobRequest: PatchJobRequest,
        jobId: String
    ): Resource<RydanJob, GenericError>

}


接口远程作业存储{
暂停趣味更新作业(
patchJobRequest:patchJobRequest,
jobId:String
):资源
}
以及该计划的实施情况

internal class RemoteJobsRepositoryImpl(
    private val jobServices: RydanJobServices
) : RemoteJobsRepository {

    override suspend fun updateJob(
        patchJobRequest: PatchJobRequest,
        jobId: String
    ): Resource<RydanJob, GenericError> = makeRequest(
        { jobServices.updateJob(patchJobRequest, jobId) }) {}
}

内部类RemoteJobsRepositoryImpl(
私人val jobServices:RydanJobServices
):RemoteJobsRepository{
覆盖suspend-fun-updateJob(
patchJobRequest:patchJobRequest,
jobId:String
):Resource=makeRequest(
{jobServices.updateJob(patchJobRequest,jobId)}{}
}
正如我所期望的那样,使用koin来完成我的DI,我可以将接口公开给实现这个模块的模块

factory<RemoteDataSyncRepository> { RemoteDataSyncRepositoryImpl(get(), get()) }
factory{RemoteDataSyncRepositoryImpl(get(),get())}
这一切都像预期的那样工作,但困扰我的可能更多的是命名问题,但我不确定。但是,这是公开我的方法的“最佳实践”方式,还是有更好的方式,因为在这一刻,它被当作实现它的实际模块中的一个普通存储库来使用

所以我的问题是,;这是从我的模块中公开信息的正确方法还是有其他更好的方法?此外,任何关于这方面的阅读材料都会很好