Normally with Java, we make a *Contract
interface to handle interaction between View and Presenter, like:
MainActivity
As View
public class MainActivity extends Activity implements MainContract {
@Override
public void onCreate(Bundle b) {
presenter.requestData();
}
@Override
public void showData(String data) {
// Handle data ...
}
MainPresenter
As Presenter
public class MainPresenter {
public void requestData() {
contract.showData("data");
}
}
MainContract
As interface
public interface MainContract {
void showData(String data);
}
Since Kotlin has the feature "Higher order function", should we simply pass functions to handle interaction between view and presenter? It can be something like:
View:
presenter.requestData { data ->
// Handle data
}
Presenter:
fun requestData(handler: (String) -> Unit) {
handler("data")
}
I'm not asking about the possibility, I'm asking if it's a best practice or not.