重构包以匹配UI层次结构

时间:2015-04-28 11:11:27

标签: android refactoring

目前我的应用程序主要是.app包中的一堆Java文件。我通过给类奇怪的名字来模拟层次结构。

My_0_MainActivity.java
My_0_CenterLayout.java
My_1_1_0_CenterPageOptionsFragment.java
My_1_1_1_CenterPageGridFragment.java
My_1_1_CenterPagerFragment.java
My_1_2_CenterSettingsFragment.java
My_2_DrawerLeftBaseFragment.java
My_3_0_DrawerRightDatePickerFragment.java
My_3_1_DrawerRightOptionsFragment.java
My_3_DrawerRightBaseFragment.java
...

应该反映

MainActivity.java
 +-CenterFragment.java
 |  +-CenterPagerFragment.java
 |  |  +-CenterPageOptionsFragment.java
 |  |  +-CenterPageGridFragment.java
 |  +-CenterSettingsFragment.java
 +-DrawerLeftBaseFragment.java
 +-DrawerRightBaseFragment.java
   +-DrawerRightDatePickerFragment.java
   +-DrawerRightOptionsFragment.java

所以我想我会创建像

这样的子包
 .app.MainActivity.java
 .app.center.BaseFragment.java
 .app.center.pager.MainFragment.java
 .app.center.pager.page.OptionsFragment.java
 .app.center.pager.page.GridFragment.java
 .app.center.settings.MainFragment.java
 .app.drawer.left.MainFragment.java
 .app.drawer.right.MainFragment.java
 .app.drawer.right.page.DatePickerFragment.java
 .app.drawer.right.page.OptionsFragment.java

在开始重构时,我收到了消息

Error:(260, 50) error: m_strTitle is not public in My_0_ApplicationState.TopicObject; cannot be accessed from outside package

这是因为。My_0_ApplicationState在.app包中包含一个名为TopicObject的类,它有一个名为m_strTitle的私有成员,我从这个新的包center.pager.MainFragment访问它成为.app包中My_0_ApplicationState的兄弟,名为My_1_1_CenterPagerFragment。以前,虽然它们都在同一个包中,但这不是错误。

将TopicObject的成员更改为public可以解决这个问题,但这让我想到我是否可能使这种重构错误。

进行这种重构是好的,还是应该使用其他方法?这种重构是否会使我的代码更清晰,或者引入一种不应该这样做的方法?

1 个答案:

答案 0 :(得分:0)

在代码中使用适当的包使其更加清晰,以后更容易阅读。只有你应该注意暴露给外面世界的东西才能使用适当的访问修饰符或者提供访问数据的替代方法。