2012-04-16 8 views
2

最近、私たちの教授は、プレゼンテーション層は主にメソッド呼び出しで構成され、コードのほとんどはビジネスオブジェクトとデータアクセス層で行われるべきだと述べました。私の質問は、これは通常、ユーザー入力のコードが含まれていますか?これは私が意味することです。私は、複数のテキストボックスで構成されたフォームを持っているので、ユーザーはさまざまな値を入力できます。その後、ユーザーはボタンをクリックし、情報はデータベースに保存されます。3層アーキテクチャーの概要

ボタンさえ方法は次のようになります。

//event handler for data input 
public static void btnEnterAbRipperXInfo_Click(object sender, EventArgs e) 
{ 
    //convert text box data into int datatype and assign to variable 
    inAndouts = int.Parse(txtInAndOuts.Text); 
    forwardBicycles = int.Parse(txtForwardBicycles.Text); 
    reverseBicycles = int.Parse(txtReverseBicycles.Text); 
    crunchyFrog = int.Parse(txtCrunchyFrog.Text); 
    crossLegWideLegSitups = int.Parse(txtCrossLegWideLegSitups.Text); 
    fiferScissors = int.Parse(txtFiferScissors.Text); 
    hipRockNRaise = int.Parse(txtHipRockNRaise.Text); 
    pulseUpsHeelsToHeaven = int.Parse(txtPulseUpsHeelsToHeaven.Text); 
    vUpRollUpCombos = int.Parse(txtVUpRollUpCombos.Text); 
    obliqueVUps = int.Parse(txtObliqueVUps.Text); 
    legClimbs = int.Parse(txtLegClimbs.Text); 
    masonTwists = int.Parse(txtMasonTwists.Text);    
} 

上記のボタンイベントメソッド内のコードではなく、実際にプレゼンテーション層クラスのビジネスオブジェクトまたはデータアクセスクラスに行くべきでしょうか?

これは宿題ではありません。私はプログラムクラスの外で私の息子のための90日間の運動プログラムを作成しています。私は卒業時のポートフォリオとしても使うことができるので、標準的なプラクティスに従っていることを確認したいと思います。

答えて

0

BOLは、DAL(データアクセス層)に行く前に浄化する必要のある特定のビジネスチェック/ケースを処理します。 DALはBOLからの入力を受け取り、それらをデータベースに渡します。

テキストボックス値にビジネスロジックのタイプが必要ない場合は、それらをBOLに渡してDALに自由に渡すことができます。

コードの外観から、チェック/検証は必要ありません。冗長に見えるかもしれませんが、プロジェクトとの一貫性を保つために、BOLに渡すことはできます。本質的には、あなたのBOLはこれらの価値観に基づいて行動することはありません。それは単にこれらの価値観を受け取り、それをDALに渡すだけです。

+1

@ProgrammingNewbie - 問題ありません - あなたが現在UI層にあるべきことを理解しているだけで、あなたのコードでParseの前にTryParseしたいことがあります。 txtMasonTwists.Textが整数でない場合、それは簡単に例外をスローする可能性があります。 – JonH

0

いいえ、これはドメインまたはデータレイヤオブジェクトには適切ではありません。あなたはプレゼンテーション要素と直接対話しているので、これはUIレイヤーでうまくいきます。

これらの値を取り出して適切なタイプに解析したら、その作業をUIレイヤーから外すことをお勧めします。

さらに、int.TryParseを使用して値を変換することを検討する必要があります。これは、テキストボックスに1つの数値以外の値を入力するとフォームが例外をスローするためです。

1

コードはUIから値を読み取ります。

このコードは、ビジネスレイヤーがUIにアクセスできないため、UIレイヤーにのみ存在できます。

1

通常、UIレイヤーまたはプレゼンテーションレイヤーでは、(現在行っているように)コントロールから値を取得します。次に、これらすべての値を使用してビジネスロジックメソッドを呼び出します。何かのように

BAL.ProcessRequest(arg1,arg2,.....); 

これらの入力に関連するビジネスルールがある場合は、ビジネスロジックで実行します。たとえば、商品と注文数量を渡していて、ビジネスルールに基づいてそれらの商品の割引を計算する場合は、ビジネスレイヤで割引計算を実行します。
その後、データベースに送信しようとするときに、データアクセスレイヤーを呼び出します。次のようなものがあります。

DAL.SaveData(arg1,arg2,...); 

基本的に別のレイヤーを持つ理由は、アプリケーションを疎結合させることです。たとえば、アンダーレイデータベースを変更する場合は、ビジネスレイヤーまたはプレゼンテーションレイヤーではなく、データアクセスレイヤーのみを変更する必要があります。
WebアプリケーションからデスクトップアプリケーションにUI /プレゼンテーションレイヤーを変更したい場合は、プレゼンテーションレイヤーでのみ変更することができます。ビジネス層とデータアクセス層は変更されません。テキストボックスコントロールをビジネスレイヤに渡すことを考えている場合は、アプリケーションが結合されます(UI/Presentation Layerはビジネスレイヤと結合されます)。
ここにはThree Tier Architectureを説明する記事があります。

+0

@ Habib.OSU - これを説明する時間をいただきありがとうございます。それは非常に有用でした。また、リンクに感謝します。私はそれを必ず読んでいます。 –

+0

ロジックを実行する必要がない場合は、UIからDALに直接情報を渡すことができますか、それともBALをまだ通過する必要がありますか? UIからデータを渡すためだけにBALクラスを作成することは、リソースの無駄のようです。 –

+1

@ProgrammingNewbieもちろんこれは可能ですが、データに関するビジネスルールを実行する必要がないケースはほとんどありません。しかし、それでも後であなたが何かをする必要はないと思うなら、あなたはビジネス層を省略することができます。 – Habib

関連する問題