将自定义类型作为参数从PL传递到BLL,再传递到DAL以插入记录
本文关键字:DAL 记录 插入 BLL 自定义 参数 PL 类型 | 更新日期: 2023-09-27 18:24:07
我在项目中使用实体框架。我使用的是3层架构(表示层(PL)、业务逻辑层(BLL)和数据访问层(BAL))。实体框架定义了所有实体以及对BD的CRUD操作。
我遇到了一个基本问题。假设我需要在数据库中插入客户。我想按照
---------------PL-------------
Customer ObjCustomer=new Customer();
//init object
ObjCustomer.Name="";
--------------
------------
BLL.InsertCustomer(ObjCustomer)
------------------------------------------------
-------------------BLL---------------
DAL.InsertCustomer(ObjCustomer)
------------------------------------
-------------------DAL---------------
CustomerReporitory.InsertCustomer(ObjCustomer)
------------------------------------
现在的问题是客户在DAL中被定义为EF的一部分。在PL中使用DAL-ref是不可取的。我想传递自定义类类型,如customer作为参数。如何做到这一点。请给我一些示例代码。
表示层中的Customer不应该是来自业务层或数据层的Customer。表示层中的Customer应该类似于ViewModel,因此它应该只携带属性并在业务层中声明。这是应该发送到CreateCustomer的业务层的对象类型,后者反过来从中创建业务实体或DAO,并将其传递给持久性。
表示层
UserViewModel theUser=new UserViewModel(userNameField,passwordField);
userController.CreateUser(theUser);
业务层
public class UserController
{
public void CreateUser(UserViewModel user)
{
bool isUserValid=ValidateUser(user);
if(isUserValid)
{
UserEntity theEntity=new UserEntity(user);
_userRepository.Create(theEntity);
}
else
{
throw new InvalidUserException("This user isn't valid");
}
}
}
数据层
public class UserRepository
{
public void Create(UserEntity user)
{
/* store user to database or whatever */
}
}
如果你的模型没有方法或功能,只是一组get/set属性,你可以把它放在一个单独的程序集/命名空间中,让所有层都把模型作为依赖项。不过,这只建议在非常简单的应用程序中使用,对于任何更复杂的应用程序,请使用Tobias的方法。