0

フロントページとコントロールパネルにも CRUD 機能を備えた Web サイトを開発しました。接続してCRUDしようとすると、各ページに同じコードを書いていることがわかります。

コードを最適化する方法を調査する十分な時間がなかったので、必要なことを書きました。私も苦しんできました。しかし、私には次のチャンスがありませんでした。

例えば:

私にはデータベースがあり、もちろん接続文字列が必要です。レコードをページ (たとえば) blogs.aspx に読み込む必要があります。別のページ news.aspx で、新しい接続を再度作成する必要があり、新しい Sqlconnection インスタンスを作成します。

私が言ったように、私は今40以上のページを持っており、db接続、datagridviewの入力コードがたくさんあります。

私の質問:

  1. マスター ページ (Site.Master) で Connection、DataTable、DataAdapter、Command インスタンスを定義するのは良い方法でしょうか? それとも、カプセル化の概念は私を妨げますか?

  2. konnekt.cs という名前のクラスを作成した場合、そのオブジェクトを現在のページにどのように継承するのでしょうか? つまり、現在のページから konnekt.cs に拡張するにはどうすればよいでしょうか?

たぶん私は反対票を得るでしょうが、このリスクはこれらの概念を学ぶ価値があると思います. 私は c# と他のプログラミング言語の初心者です。

ヒントをありがとう。

4

3 に答える 3

5

あなたがする必要があるのは、「関心の分離」の概念を学ぶことです。これは基本的に、コードの機能に応じてコードを分割することを意味します。現在 (あなたの質問から私が理解したことから)、すべてのコードが 1 か所にあります。お気づきのように、これは良いことではありません。確かに今は動作しますが、変更が必要になるとすぐに問題が発生します。

基本的には、データベース内のデータを操作するコード (通常はデータ アクセス レイヤーと呼ばれます) と、そのデータを表示するコード (プレゼンテーション レイヤー) を分離する必要があります。ページ (プレゼンテーション レイヤー) が読み込まれると、データ アクセス レイヤーを呼び出してそこからデータを取得します (ページは DB を直接呼び出しません)。通常、これら 2 つのレイヤーの間には、ビジネス ルール ロジックを含むビジネス レイヤーと呼ばれる 3 番目のレイヤーがあります。

マスター ページ (Site.Master) で Connection、DataTable、DataAdapter、Command インスタンスを定義するのは良い方法でしょうか? それとも、カプセル化の概念は私を妨げますか?

それは良い考えではありません。マスター ページはプレゼンテーションに属しているため、DB を直接呼び出すものをそこに配置することはできません。

konnekt.cs という名前のクラスを作成した場合、そのオブジェクトを現在のページにどのように継承するのでしょうか? つまり、現在のページから konnekt.cs に拡張するにはどうすればよいでしょうか?

繰り返しますが、ページから直接 DB を呼び出さないでください。DB に接続する別のクラスを作成し、ページにそのクラスを呼び出させます。

于 2013-03-07T20:23:47.353 に答える
0

これらのメソッドを他のクラスで定義し、コード ビハインドから呼び出すだけです。または、共通の基本クラスでそれらのいくつかを定義します

2ページをサブクラス化する必要があり、独自のベースクラスを作成できます

于 2013-03-07T20:21:01.723 に答える
0

System Downのように、私の提案は、ページ コードの db コードを破棄します.. App_Code フォルダーを使用します。

ページ ファイル コードでは、db 作業ではなく、ページ作業を行うためにメソッド/プロパティ/etc を記述する必要があります。

共通ページ コードの場合は、ac# ファイル (常に App_Code の下) に配置できます。

System.Web.UI.Pageクラスを拡張することによって。

例 App_Code/PageBase.cs :

public class PageBase : System.Web.UI.Page
{
    // common code
}

例 Default.aspx.cs :

public partial class _Default : PageBase // instead of System.Web.UI.Page
{

}
于 2013-03-07T20:37:42.337 に答える