3层架构中的情况如何

时间:2012-04-16 17:07:40

标签: c# 3-tier

最近,我们的教授表示我们的表示层应该主要包含方法调用,并且我们的大部分代码都应该在业务对象和数据访问层中完成。我的问题是这通常包括用户输入的代码吗?我的意思是这个;我有一个由多个文本框组成的表单,以便用户可以输入不同内容的值。然后,用户单击一个按钮,信息将保存在数据库中。

按钮偶数方法如下所示:

//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天的锻炼计划。我也可以在毕业时将其用作投资组合,因此,我希望确保我遵循标准做法。

4 个答案:

答案 0 :(得分:1)

您的代码从UI中读取值。

此代码只能位于UI层,因为业务层无法访问UI。

答案 1 :(得分:1)

通常在UI Layer或Presentation层中,您可以从控件中获取值(就像您现在所做的那样)。然后使用所有这些值调用您的业务逻辑方法。像

这样的东西
BAL.ProcessRequest(arg1,arg2,.....);

现在,如果您有一些与这些输入相关的业务规则,那么您可以在业务逻辑中执行。例如,如果您要传递产品及其订购数量,并且希望根据某些业务规则计算这些产品的折扣,则在业务层中执行折扣计算。
在此之后,当您要提交到数据库时,您将调用数据访问层。类似的东西:

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

拥有单独图层的原因基本上是松散地耦合应用程序。例如,如果您决定更改底层数据库,那么您将需要仅更改数据访问层,而不是业务层或表示层。
假设您想要将UI /表示层从Web应用程序更改为桌面应用程序,那么以后只会在表示层中进行更改。业务层和数据访问层将保持不变。如果您正在考虑将文本框控件传递给Business层,那么您的应用程序将被耦合(UI / Presentatioin层将与Business Layer结合)。
这是一篇解释Three Tier Architecture的文章。

答案 2 :(得分:0)

BOL负责在进入DAL(数据访问层)之前需要清理的特定业务检查/案例。 DAL只接收来自BOL的输入并将它们传递给数据库。

如果您的文本框值不需要任何类型的业务逻辑,您可以将它们传递给BOL以自由地将它们传递给DAL。

从代码的外观来看,不需要检查/验证。虽然看起来多余,但为了与您的项目保持一致,您仍然可以将它们传递给BOL。从本质上讲,你的BOL不会对这些值采取行动 - 它只会采用这些值并将其传递给DAL。

答案 3 :(得分:0)

不,这不适合域或数据层对象。因为您正在直接与表示元素进行交互,所以对于UI层来说这很好。

现在,一旦你将这些值拉出并解析成适当的类型,那么将这项工作从UI层转移出去是个好主意。

此外,您应该考虑使用int.TryParse转换您的值,因为如果您在文本框中输入一个非数字值,您的表单将抛出异常。

相关问题