Hançeri kullanmak, Sunucunuzdaki Interactor'ı enjekte etmeyi kolaylaştırır. Bu bağlantıyı deneyin (https://github.com/spengilley/AndroidMVPService)
Bunu hantal olmadan gerçekleştirmeye çalışıyorum. Ancak bu MVP mimarisini ihlal ediyor gibi görünüyor.
Etkinlikten, Interactor'ın bir örneğini oluşturdum. Ardından, Interactor ile Presenter örneğini parametrelerden biri olarak oluşturun.
Aktivite
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();
}
Sunum
public interface SomePresenter {
public void startServiceFunction();
}
Sunum Uygulama
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();
}
}
İnteraktör
public interface SomeInteractor {
public void startServiceFunction();
}
İnteraktör İmplementasyonu geri aramalar `GoogleApiClient.ConnectionCallbacks` ve` GoogleApiClient işlemek nasıl
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);
}
}
Cevabın doğru olduğunu düşünmüyorum. Uygulayıcı, belirli çerçeveler hakkında hiçbir şey bilmemeli ve Temiz Mimari [link] 'den (https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean) yönergeleri izlerseniz Android agnostik olmalıdır. -architecture.html). Bu nedenle, İçerik sınıfı da dahil olmak üzere Android ile ilgili herhangi bir şeyden tamamen arınmış olmalıdır. – koufa
@koufa 'Context' _somewhere_ koymalısınız. Bir "Hizmet" ile başka nasıl etkileşim kuracaksınız? Ne önerirsiniz? – AutonomousApps
@AutonomousApps Uygulamanızı katmanlara bölerseniz, Interactor'ler Domain Layer'da yer alır. Bu Katman, Android bağımlılığı olmayan herhangi bir çerçeveye bağlı bağımlılığa sahip olmamalıdır. 'Servis' başlatması bu kodu sardığınız DataLayer'a gitmelidir. 'Intent intent = new Intent (context, SomeService.class); context.startService (intent); 'Etki Alanı Katmanı'ndan bir arabirim uygulayan bir sınıfta. Ardından, Interactor sadece bu arabirimi bilecek ve bunun somut uygulanmasından haberdar olmayacaktır. – koufa