Sử dụng dao găm làm cho việc đưa Interactor vào Trình bày của bạn dễ dàng hơn. Hãy thử liên kết này (https://github.com/spengilley/AndroidMVPService)
Tôi đang cố gắng đạt được điều đó mà không cần dao găm. Nhưng điều này có vẻ vi phạm kiến trúc MVP.
Từ Hoạt động, tôi đã tạo một phiên bản của Interactor. Sau đó tạo cá thể của Người trình bày với Interactor làm một trong các tham số.
Hoạt động
public class SomeActivity extends Activity implements SomeView {
private SomePresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SomeInteractor interactor = new SomeInteractorImpl(SomeActivity.this);
presenter = new SomePresenterImpl(interactor,this);
}
@Override
protected void onStart() {
super.onStart();
presenter.startServiceFunction();
}
Presenter
public interface SomePresenter {
public void startServiceFunction();
}
Presenter Thực hiện
public class SomePresenterImpl implements SomePresenter {
private SomeInteractor interactor;
private SomeView view;
public SomePresenterImpl(SomeInteractor interactor,SomeView view){
this.interactor = interactor;
this.view = view;
}
@Override
public void startServiceFunction() {
interactor.startServiceFunction();
}
}
INteractor
public interface SomeInteractor {
public void startServiceFunction();
}
INteractor Thực hiện
public class SomeInteractorImpl implements SomeInteractor {
private Context context;
public SomeInteractorImpl(Context context) {
this.context = context;
}
@Override
public void startServiceFunction() {
Intent intent = new Intent(context, SomeService.class);
context.startService(intent);
}
}
Tôi không nghĩ câu trả lời là đúng. Người tương tác không nên biết bất kỳ điều gì về các khung công tác cụ thể và phải là bất khả tri của Android nếu bạn làm theo hướng dẫn từ [Kiến trúc sạch] [link] (https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean -architecture.html). Do đó, nó hoàn toàn không có bất kỳ thứ gì liên quan đến Android bao gồm cả lớp Ngữ cảnh. – koufa
@koufa bạn phải đặt 'Context' _somewhere_. Bạn sẽ tương tác với một dịch vụ khác như thế nào? Bạn muốn giới thiệu gì? – AutonomousApps
@AutonomousApps Nếu bạn chia ứng dụng của mình thành các lớp thì các Trình tương tác sẽ nằm trong Lớp Miền. Lớp này không nên có bất kỳ phụ thuộc khung cụ thể nào có nghĩa là không phụ thuộc vào Android. Việc khởi tạo 'Service' sẽ đi đến DataLayer nơi bạn quấn mã này' Intent intent = new Intent (context, SomeService.class); context.startService (intent); 'trong một lớp thực hiện giao diện từ Lớp Miền. Sau đó, các Interactor sẽ chỉ biết về giao diện này và không phải về việc thực hiện cụ thể của nó. – koufa