4

一部のmysqlクエリに対して、Excelにエクスポートを作成し、PDFオプションにエクスポートして、ユーザーに提供する必要があります。

しかしまた、ユーザーは私のWebサイトでもクエリ結果を表示する必要があります。

したがって、この場合、3つのphpコードファイルを作成する必要があるため、コードの冗長性が発生します。

1つは、ユーザーが自分のWebサイトでクエリ結果を直接表示できるようにするためのものです。

もう1つは、ユーザーが同じクエリ結果をExcelにエクスポートできるようにするためのものです。

ユーザーが同じクエリ結果をPDFにエクスポートできるようにする最後の1つ

3つのファイルはすべて同じコードを持っていますが、違いはデータをExcelまたはPDFに送信する方法だけです。

このコードの重複を根絶するにはどうすればよいですか。ファイルを1つだけにして、それをあらゆる目的、表示、pdfへのエクスポート、およびExcelへのエクスポートに使用できる方法はありますか。

4

6 に答える 6

3

「ファイルを 1 つだけ持っていて、表示、PDF へのエクスポート、Excel へのエクスポートなど、あらゆる目的に使用できる方法はありますか?」答えはYESだと思います。

特定のコードを特定の方法で表示するオプションをユーザーに提供するには、選択ボックスを配置する必要があります。そのための以下のサンプルコードを参照してください。

<select name="viewoption" id="viewoption">
<option value="view">Page view</option>
<option value="xls">Export in Excel</option>
<option value="pdf">Export in PDF</option>
</select>

次に、アクションページで、値をチェックアウトして$_POST['viewoption']、要件に従ってif 条件を設定するだけです。

これはあなたの役に立つかもしれません。質問があればお知らせください。

ありがとう。

于 2012-01-27T08:48:05.670 に答える
3

別のコメンターが指摘したように、関数を分割する必要があります。対処方法は以下の通り

1) データベースからデータをフェッチする関数を 1 つ持つ (これがモデルになります)

2)このデータをフォーマットする別の機能(行の終わりなどで合計を計算する)を持ち、使用するビューを選択します(これはコントローラーになります)

3) データの表示に特化した別の関数を用意する (そのため、PDF 用のビュー、XLS 用のビュー、Web 用のビューがあります)

また、コメントからこのアドバイスに従ってください

于 2012-01-27T09:06:53.617 に答える
2

まだ何も書いていないので、冗長性はありません。冗長性はアイデアにあります。適切な抽象化により、 DRYであるコードを記述できます。たとえば、上記の Chandersh のような選択を行うことができます。

<select name="viewoption" id="viewoption">
<option value="view">Page view</option>
<option value="xls">Export in Excel</option>
<option value="pdf">Export in PDF</option>
</select>

次に、リクエストをリッスンするコード (場合によってはコントローラー) を作成する必要があります。同じデータを異なる形式で書き出すため、次のようなことができます。

  1. データを取得する(必要に応じてモデルから)
  2. リクエストを使用して実行する関数/コード/ビューを決定する
  3. 以前の決定を使用して適切な形式を生成する関数 /code/view を呼び出します
  4. 終わり

MVC を使用するかどうかは問題ではなく、コンポーネントが一緒に行う実際の作業だと思います。

注意:複数のファイルを持つことは、コードの重複を意味しません。ファイルは単なるコンテナです。ジャバを例にとってみましょう。Java では、すべてのクラスを別のファイルに配置するのが一般的です。

于 2012-01-27T09:00:54.897 に答える
2

回答をすべて 1 つのファイルにまとめることもできますが、なぜそうするのですか? おそらく他にもたくさんのコードが浮かんでいるか、最終的には浮かんでいるでしょう。

モデル ビュー コントローラー (MVC) 設計を使用する必要があります。すべてのSQLを処理する1つのクラス(純粋にデータであり、データが正確に作成、保存、返されることを確認する)、データのリクエストを取得/作成し、レンダリングするビューを指示する別のファイル、および最後に2つまたは3つのテンプレートのみが必要ですコントローラーで作成されたデータを単純にフォーマットしてレンダリングするタイプのファイル (ビュー)。

ファイル/クラスを増やすと、コードがよりモジュール化され、コードの冗長性がなくなります。すべてを 1 つのファイルにまとめると、コードの冗長性が高まります。

于 2012-01-27T08:51:36.163 に答える
2

すべてのコードを 1 つのファイルに配置します。$_GET['format']PDFまたはExcelとしてフォーマットする必要があるかどうかを決定するために使用します。デフォルトはWebページオプションです。

<?php

if($_GET['format'] == "pdf")
{
     // export as PDF
}
elseif($_GET['format'] == "excel")
{
     // export as excel
}

次と同じページへのハイパーリンクを使用します。

http://www.site.com/page.php?format=pdf
http://www.site.com/page.php?format=excel
http://www.site.com/page.php //webpage
于 2012-01-27T08:42:47.720 に答える
2

重複コードは、常に次善のソフトウェア設計の兆候であり、それを防ぐ機会はたくさんあります。あなたの特定のタスクのためのそれらのいくつかはここにあります:

1. パラメータを使用する

ファイルを 1 つに統合し、URL で GET-Params を使用しますfile.php?output=pfd。スクリプトでは、このパラメーターを読み取り、$_GET['output']生成するエクスポート形式 ( if ... elseswitch) を決定できます。

2. インクルードを使用する

大きなファイルを 1 つだけ持つと、非常に混乱します。したがって、3 つの php ファイルを保持し、4 つ目のファイルを作成することもできます。このファイルget_data.inc.phpには、データを取得する重複コードがすべて含まれています。これで、3 つのすべての php でこのファイルをロードして実行できますinclude get_data.inc.php

3. 機能を利用する

インクルードが何をするのか、何が依存関係なのかがわからないため、コードをインクルードにアウトソーシングします。これも混乱を招く可能性があります。したがって、機能を関数にカプセル化することをお勧めします。ここでは、関数に何を貼り付けるか (db 接続?)、何を取得するか (データ配列?) を明確に定義できます。新しいファイルget_data.func.phpを作成して を定義しfunction get_data($db_connection)、すべての作業を行い、出力の準備が整ったデータを返します。次に、すべてのファイルにファイルをインクルードしrequire_once get_data.func.php$Data = get_data($db_connection);.

4. クラス継承を使用する

クラス継承の概念を使用できます。データベースからデータをフェッチする機能を含む抽象クラスを定義し、抽象関数を定義できますabstract public function output();output()次に、特定の方法で関数を実装するクラスを拡張する子クラスを作成できます。

5. MVC フレームワークを使用する

確立されたフレームワークを使用して、「Model View Controller」(MVC) パターンを実装できます。ここでは、アプリケーションのさまざまなレイヤー (db からのデータ、出力用のデータの準備、データの提示) を非常にきれいな方法で分割します。

免責事項: これらは、プロジェクトをよりよく整理するための学習のヒントにすぎません。あまり経験がない場合は、大きな MVC フレームワークから直接始めることはお勧めしません。悟りの道を上から下へと進んでください ;)

于 2012-01-27T09:04:22.023 に答える