读书人

多层应用中的有关问题希望各位老师解

发布时间: 2012-02-21 16:26:23 作者: rapoo

多层应用中的问题,希望各位老师解答
首先我在数据访问层DataAccess创建方法:
public void AddPersonnel(BasePersonnel bp)
{
using (SqlConnection cnn = GetConn())
{
cnn.Open();
using (SqlCommand FCommand = cnn.CreateCommand())
{
FCommand.CommandText = "AddPersonnel ";
FCommand.CommandType = CommandType.StoredProcedure;
FCommand.Parameters.Add( "@PersonnelName ", SqlDbType.Char).Value = bp.PersonnelName;
FCommand.Parameters.Add( "@PersonnelSex ", SqlDbType.Char).Value = bp.PersonnelSex ?? string.Empty;
FCommand.Parameters.Add( "@PersonnelCard ", SqlDbType.Char).Value = bp.PersonnelCard ?? string.Empty;
FCommand.Parameters.Add( "@PersonnelPhone ", SqlDbType.Char).Value = bp.PersonnelPhone ?? string.Empty;
FCommand.Parameters.Add( "@PersonnelEmail ", SqlDbType.Char).Value = bp.PersonnelEmail ?? string.Empty;
FCommand.ExecuteNonQuery();
}
}
}
接着在规则定义层:
public void AddPersonnel(BasePersonnel bp)
{
if (bp.PersonnelName == string.Empty || bp.PersonnelName == null)
{
return null;


}
using (PersonnelLayer layer = new PersonnelLayer())
{
return layer.AddPersonnel(bp);
}
}
这样是会出错的,因为我在数据访问层的方法返回的是一个void,而在规则层里,用了return,所以我想请教的是应该怎么改能不出错,如果把方法的返回值改成bool型,代码要怎么改,或是别的方法也行

[解决办法]
两种方式:
一、返回bool或者数值来代表操作是否成功或者操作后的状态
二、数据访问层和业务层都没有返回值,不符合正常规则时,就抛出异常。

个人比较倾向于第二种,但这种方式要求有比较完整的异常处理机制。
[解决办法]
你这种程序在我看来等于一层,或者说是“高度耦合”的,根本没有分层的思想。
[解决办法]
至于你说的问题,其实不是问题。既然定义为“public void AddPersonnel(BasePersonnel bp)”,当然就就不应该写return。往往,初学者不是想的太少,而是想的太多,总是把事情想得太随意。其实你应该按照简单的语法去做,好比设计你的“PersonnelLayer”层的人是第一个你,设计你的“规则定义层”的是第二个你,这两个你要么第一个尊重第二个的接口,要么第二个尊重第一个接口,然后再各自尽量优化结构。其实怎样都需要一定程度地妥协,不能没完没了地互相乱扯皮。
[解决办法]
顶!

读书人网 >asp.net

热点推荐