さまざまなオンライン アーカイブからコンテンツをスクレイピングするプログラムを開発していますが、OOP は初めてです。私が最もうまくいくと思う方法は、共有変数とメソッドを指定する親クラスを用意し、次に各アーカイブの子クラスを用意して、その特定のサイトから情報を取得するための特定のメソッドを含めることです。そのアーカイブの個々のニーズに対応するための各子クラス。プログラムはテキスト ボックスに URL を受け取り、そこから URL を使用して、どの子クラスをインスタンス化するかを決定します。
私が抱えている問題は、子クラス オブジェクトを作成し、プログラム全体からアクセスできるようにする方法を考え出すことです。たとえば、 FanFictionAuthors : FanBook のインスタンスを作成するには:
private void btnGetInfo(object sender, EventArgs e)
{
CreateBook();
}
private void CreateBook()
{
if (addressBar.Text.Contains("fanficauthors.net"))
{
FanFictionAuthors myBook = new FanFictionAuthors();
}
return;
}
myBook のスコープは CreateBook() 関数だけなので、この方法ではうまくいきません。この問題を処理する最善の方法について何か提案はありますか? 私はこれをプログラミングをよりよく学ぶためのアプローチとして使用しているので、「正しい」方法は、それが何であれ、私が理解しようとしているものです。
編集: プログラムの特定の機能は、fanfiction.net、fictionpress.com、またはその他のオンライン ストーリー アーカイブの 1 つから、提供されたオンライン ストーリーの URL を取得することです。タイトル、チャプター数、単語の長さ、チャプター タイトル、ストーリーの実際の内容など、各ストーリーには一連の共有属性があります。プログラムはこれらすべてをコンパイルして、個々の小さな章ファイルの束ではなく、単一の html ドキュメントを作成します (後でさまざまな電子ブック形式を可能にするために拡張されます)。
それを念頭に置いて、各アーカイブ間で異なる部分は、特定のアーカイブから変数を取得する方法と、そのためのアーカイブの機能に基づいて章間を反復する方法だけです。
現在私がやっていることは、メイン フォームの起動直後に myBook オブジェクトを作成し、変数を取得して反復を実行する関数の別のメソッド名を作成することです。ただし、アーカイブを追加すると、これはより複雑になります。私が最初にやりたかったことは、myBook を個々のアーカイブ タイプ (この場合は FanFictionAuthors) にキャストして、特定の機能を使用できるようにすることでした。オンラインで見ると、親から子へのキャストは簡単でも推奨されていないように見えるので、他にどのようにアプローチすればよいかわかりません。
プロジェクトの GitHub リンクは次のとおりです。このバージョンは少し古くなっていますが、私が現在これにどのように取り組んでいるかを見ることができます: https://github.com/benroth/fBook