2012-08-02 23 views
0

我是3层体系结构的新手,因为它由UI,BAL和DAL图层组成。因此,我将所有数据库代码编写在DAL中,并且我已经在BAL中声明了变量,调用方法到UI中,但是这是正确的编码方式??我的BAL在做什么?业务层的主要目的是什么?任何人都可以解释我,谢谢。3层体系结构的BAL的目的

//In my BAL 



public class ProfileMasterBLL 
{ 
    public int UserId { get; set; } 
    public string FormFiledBy { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

} 

//在我的UI

ProfileMasterBLL pmBLL = new ProfileMasterBLL(); 
     pmBLL.FirstName = TextBox1.Text; 
     pmBLL.LastName = TextBox2.Text; 



//In my DAL 

的插入方法()

的话,我怎么能叫ProfileMasterBLL.insert()?正如我在DAL中所写的那样。

+0

系统必须包含多少逻辑,它包含的位置自然取决于系统的功能。如果你能给我们一个你正在创建的东西的简短描述,那么评论一下会容易一点。这样我们就可以在您感兴趣的环境中提供更多的答案。 – Kjartan 2012-08-02 14:45:09

+0

您的编辑不是三层体系结构的示例。你有什么似乎是ADT(抽象数据类型),你应该为这些类型的包创建一个单独的类。然后您可以使用该ADT在BL和DAL中传递。对于业务逻辑层来说,属性应该不存在,最多只能是调用DAL的简单方法。 – JonH 2012-08-02 17:15:07

+0

当我在谷歌搜索时,我得到了不同类型的3层架构的结果,每个人都有自己的实现方式,所以我真的有点困惑。如果你发现任何好的例子请在这里发布:) – 2012-08-02 17:41:24

回答

1

业务层用作UI和DAL之间的中间人。 它用于您的应用程序将包含的任何或所有业务逻辑。例如,在会计应用程序中,您可能希望在将数据发送到数据库层之前对数据执行一些计算和检查,然后在业务层中执行此操作。在你的BL

//establish person object 
//pass in some salary with it to BL 
BL.CalcPay(somePerson, someSalary); 

然后:在您的DAL

//inside of BL 
//if its a CEO they are lucky, they get paid twice as much 
decimal toGive = someSalary; 
if(somePerson.IsCEO) 
toGive = toGive * 2; //CEO gets paid more :(

//now call DAL 
DAL.CalcPay(somePerson, toGive) 

然后:

你的UI可以做类似这样

//inside of DAL 
//perform some update by calling for instance a sproc 
using(SQL....) 
{ 
} 

不是最好的例子,但它应该明白这一点,有很多时候你的BL没有做任何事情,只是把方法调用交给DAL。仅仅因为这是BL,并不意味着它必须进行某种与之相关的检查。所以,你可能最终会做这样的事情:

//inside UI 
string s = BL.GetSomeString(); 

//inside BL 
return DAL.GetSomeSomeString(); 

//inside DAL 
return someString; 
+0

是否适合直接从DAL调用一个方法到UI ??那么什么是业务逻辑意味着什么? – 2012-08-02 14:33:51

+1

否您的用户界面不应该知道数据访问层,实际上您的用户界面不应包含任何类型的sql引用,如sql数据读取器。阅读我所做的编辑,你的用户界面向BL发送一些信息,BL可以对数据执行逻辑,然后只有在逻辑正常的情况下才会将它发送到DAL。 DAL对数据执行操作并将某种状态或结果提交给BL。 BL从DAL获取信息并将其传送给用户界面。 – JonH 2012-08-02 14:35:38

+0

//在我的BAL中 public class ProfileMasterBLL public int UserId {get;组; } public string FormFiledBy {get;组; } public string FirstName {get;组; } public string LastName {get;组; } } //在我的UI ProfileMasterBLL pmBLL = new ProfileMasterBLL(); pmBLL.FirstName = TextBox1.Text; pmBLL.LastName = TextBox2.Text; //在我的DAL 插入方法() 这是正确的做法吗? – 2012-08-02 15:05:13

0

业务层的作用是执行业务规则,为你的实体实例验证,对实体的业务规则的执行,对实体业务功能的执行。

通常你有两种选择。

在存储过程中

实现在业务层

+0

在存储过程中实现业务逻辑是一种反模式,绝对应该避免。 – 2012-08-02 14:36:20

+0

不,我不认为,因为在功能上下文非常困难,不可能在你的上下文中加载所有实体,即使是懒惰加载 – 2012-08-02 14:38:28

+0

你不能告诉专家数据库存储过程是反模式 – 2012-08-02 14:40:12

0

业务层的存在是为了提供把你的业务逻辑的地方的业务逻辑实现业务逻辑。数据访问逻辑应该只对数据库创建,检索,更新和删除(CRUD)操作。表示层应该只有确定用户如何与系统交互的逻辑。例如,如果在用户界面中单击“添加用户”,则可以调用业务层中的BAL.AddUser()方法,然后调用多个数据层方法(例如DAL.AddUser()来插入用户,然后DAL.AddUserToGroup()将新用户置于默认组中。

+0

这个例子可能不是最好的,因为你的BOL实际上可以调用DAL.AddUser,并且你的DAL可以做一些事情来处理'IF EXISTS(SELECT * FROM MyTable WHERE Login = @Login)的效果。返回-1 ELSE BEGIN INSERT INTO Users。 ..RETURN @SCOPE_IDENTITY END'并处理检查用户是否存在。状态以整数形式发回。该整数从DAL传递到BOL,BOL将其呈现回UI,然后UI可以发出消息。 – JonH 2012-08-02 14:37:38

+0

@rs_atl是的,但那里我的BAL是做什么的?从DAL直接调用UI到UI的方法是好的吗?我有些困惑...... – 2012-08-02 14:38:20

+0

@Chandrasekhar - 不,你不需要从DAL调用UI,他们不关心彼此,从DAL调用UI是没有意义的。 – JonH 2012-08-02 14:39:04