将 EventBus 用于简单方法调用是否矫枉过正?
Is using an EventBus for simple method calling overkill?
我正在尝试创建一个 UI 库,它基本上包含我在构建布局时通常使用的许多方法和操作。此类功能的一个示例是管理工厂点击。我在主 activity 中有一个 fab,我根据加载的片段更改其功能、图标和可见性。如您所见,我目前正在使用界面做所有事情 here。一切正常,但唯一的问题是我必须确保其他用户使用扩展我的界面的活动和片段。
例子
protected void hideFab() {
capsuleActivity().getFab().hide();
}
protected CActivityCore capsuleActivity() {
if (!(getActivity() instanceof CActivityCore)) {
throw new RuntimeException(s(R.string.capsule_activity_context_error));
}
return ((CActivityCore) getActivity());
}
如果他们不需要一个片段的功能,他们必须重写我的很多方法,让它什么都不做。我的另一个选择是使用 EventBus,并在调用某些内容时发送各种事件并相应地解决它。这样一来,用户是否使用我的 classes 就不再重要了;如果他们只想要几个片段中的功能,他们可以只为这些片段扩展我的片段而不必担心其余部分。
我的问题是,这是一种不错且可行的做事方式吗,或者对于应该如何使用 EventBuses 这是否过于矫枉过正?
我正在考虑的另一个功能是让 activity 向当前片段发送回调,并且只有当片段扩展了某个 class.
当前实施:
@SuppressWarnings("unchecked")
protected <T extends Fragment & CFragmentCore> void onCurrentFragment(Class<T> clazz, @NonNull Current<T> callback) {
Fragment current = getSupportFragmentManager().findFragmentById(getFragmentId());
if (clazz.isInstance(current.getClass())) {
callback.onMatch((T) current);
}
}
但我也可以使用 EventBus 和一个包含 class 和回调函数的事件。
使用 EventBus 是一种设计选择。它有优点也有缺点,您可以在 Google.
上轻松找到
如果您能够简化代码,就没有 "overkill" 这样的东西。
除此之外,EventBus 在您的场景中可能是个好主意,因为它提供了一种管理视图-控制器通信的简单方法。
我正在尝试创建一个 UI 库,它基本上包含我在构建布局时通常使用的许多方法和操作。此类功能的一个示例是管理工厂点击。我在主 activity 中有一个 fab,我根据加载的片段更改其功能、图标和可见性。如您所见,我目前正在使用界面做所有事情 here。一切正常,但唯一的问题是我必须确保其他用户使用扩展我的界面的活动和片段。
例子
protected void hideFab() {
capsuleActivity().getFab().hide();
}
protected CActivityCore capsuleActivity() {
if (!(getActivity() instanceof CActivityCore)) {
throw new RuntimeException(s(R.string.capsule_activity_context_error));
}
return ((CActivityCore) getActivity());
}
如果他们不需要一个片段的功能,他们必须重写我的很多方法,让它什么都不做。我的另一个选择是使用 EventBus,并在调用某些内容时发送各种事件并相应地解决它。这样一来,用户是否使用我的 classes 就不再重要了;如果他们只想要几个片段中的功能,他们可以只为这些片段扩展我的片段而不必担心其余部分。
我的问题是,这是一种不错且可行的做事方式吗,或者对于应该如何使用 EventBuses 这是否过于矫枉过正?
我正在考虑的另一个功能是让 activity 向当前片段发送回调,并且只有当片段扩展了某个 class.
当前实施:
@SuppressWarnings("unchecked")
protected <T extends Fragment & CFragmentCore> void onCurrentFragment(Class<T> clazz, @NonNull Current<T> callback) {
Fragment current = getSupportFragmentManager().findFragmentById(getFragmentId());
if (clazz.isInstance(current.getClass())) {
callback.onMatch((T) current);
}
}
但我也可以使用 EventBus 和一个包含 class 和回调函数的事件。
使用 EventBus 是一种设计选择。它有优点也有缺点,您可以在 Google.
上轻松找到如果您能够简化代码,就没有 "overkill" 这样的东西。
除此之外,EventBus 在您的场景中可能是个好主意,因为它提供了一种管理视图-控制器通信的简单方法。