Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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 Room_Android_Entity_Android Room_Encapsulation - Fatal编程技术网

在不破坏封装的情况下使用Android Room

在不破坏封装的情况下使用Android Room,android,entity,android-room,encapsulation,Android,Entity,Android Room,Encapsulation,我正在使用Room存储实体对象的数据。文件室要求所有字段都可以公开访问(使用getter/setter)。我还使用这个对象作为MVVM模式中的模型。由于该对象用于数据存储/持久化以外的目的,因此我希望封装实体对象的字段(私有字段)。但是,我必须为我的方法公开公共getter/setter(或者将其声明为public),这破坏了项目中的封装 我找到的唯一解决方案是专门为Room创建一个单独的对象作为实体对象,然后在数据持久化期间将我的模型转换为该对象。有更好的解决办法吗?我是否可以使我的字段的公共

我正在使用Room存储实体对象的数据。文件室要求所有字段都可以公开访问(使用getter/setter)。我还使用这个对象作为MVVM模式中的模型。由于该对象用于数据存储/持久化以外的目的,因此我希望封装实体对象的字段(私有字段)。但是,我必须为我的方法公开公共getter/setter(或者将其声明为public),这破坏了项目中的封装

我找到的唯一解决方案是专门为Room创建一个单独的对象作为实体对象,然后在数据持久化期间将我的模型转换为该对象。有更好的解决办法吗?我是否可以使我的字段的公共访问器只能由房间访问,而不能由其他类访问

Java或Kotlin的答案是可以的

如果您需要更多信息(例如实体类的代码),请随时发表评论


谢谢。

你走对了路。使用DB时创建一个单独的对象。创建应用程序的更好方法是删除应用程序各层之间的依赖关系(数据存储-业务逻辑-ui)是的,我所说的解决方案是可行的。但是,使用此解决方案,我必须在每次添加项目时将模型转换为对象(例如,当用户按下“添加项目”按钮时),然后转换回以获取模型。这很麻烦,我需要编写大量样板代码来管理这两种类型之间的转换。对于我添加到模型中的每个字段,我还必须确保它反映在单独的对象中,这可能会导致错误。我更希望我可以将对象直接存储在房间中,而不需要单独的对象。