私はJsoupを使用して別のWebページからデータを抽出し、分析して製品を入手するアプリケーションを作成しようとしています。データを分析するために異なるアルゴリズムを使用するときにリポジトリを実装する方法は同じですが、抽出するアルゴリズムは同じですか?
は、3種類のWebページがあり、各ページアナライザクラスは、私もAnalyzerをとるリポジトリを持って
public interface Analyser {
void setDocument(Document document);
ArrayList<Item> analyseDocument(String searchFor);
}
public class WebPageNumberOne implements Analyser {
@Override
void setDocument(Document document){
//sets document for analysing
}
public ArrayList analyseDocument(String searchFor) {
//returns data from web page number one
}
}
public class WebPageNumberTwo implements Analyser {
@Override
void setDocument(Document document){
//sets document for analysing
}
@Override
public ArrayList analyseDocument(String searchFor) {
//returns data from web page number two
}
}
public class WebPageNumberThree implements Analyser {
@Override
void setDocument(Document document){
//sets document for analysing
}
@Override
public ArrayList analyseDocument(String searchFor) {
//returns data from web page number three
}
}
アナライザ・インタフェースを実装しJsoupを使用して文書を取得し、分析
public class DocumentItemsRepository implements ItemsRepository {
private String searchFor;
private String URL;
private Document document;
private Analyser analyser;
private MainActivityPresenter presenter;
public void setSearchFor(String searchFor) {
this.searchFor = searchFor;
}
public void setURL(String URL) {
this.URL = URL;
}
public void setAnalyser(Analyser analyser) {
this.analyser = analyser;
}
public void setPresenter(MainActivityPresenter presenter){
this.presenter = presenter;
}
@Override
public ArrayList<Item> getItems() {
}
private class GetDocumentAsync extends AsyncTask<String, Void, Document>
{
}
}
に渡します
私の発表者では、私はリポジトリ実装を取り、セッタ注入によって依存関係を設定し、アイテムを取得するメソッドloadItems
を持っています。
私は時々リポジトリに別のアナライザを渡したいが、Webページのコンテンツ抽出は同じであるため、これを行った。
public class MainActivityPresenter {
private MainActivityView mainActivityView;
public MainActivityPresenter(MainActivityView mainActivityView) {
this.mainActivityView = mainActivityView;
}
public void loadItems(String URL, String searchFor, Analyser analyser,
DocumentItemsRepository documentItemsRepository)
{
documentItemsRepository.setAnalyser(analyser);
documentItemsRepository.setSearchFor(searchFor);
documentItemsRepository.setURL(URL);
documentItemsRepository.setPresenter(this);
documentItemsRepository.getItems();
}
}
Iリポジトリを注入するセッタ注入を使用し、私は実装としないインタフェースを通過するので、問題は、私は私のloadItems
方法をテストすることができないことです。
私はどのようにしてテスト可能でクリーナーになるようにコードをリファクタリングできますか?
は、私はなしでプレゼンターを初期化することに決めました
presenter = new MainActivityPresenter(this, new DocumentItemsRepository1(new Analyser1()), new DocumentItemsRepository2(new Analyser2()));