Передача пользовательского типа в качестве параметра из PL в BLL в DAL для вставки записи? - PullRequest
0 голосов
/ 12 февраля 2012

Я использую Entity framworke в моем проекте.Я использую 3-х уровневую архитектуру (уровень представления (PL), уровень бизнес-логики (BLL) и уровень доступа к данным (BAL)).Платформа сущностей определяет всю сущность, а также операцию CRUD для BD.

Я столкнулся с одной основной проблемой.Предположим, мне нужно вставить клиента в БД.Я хочу сделать так:

---------------PL-------------
Customer ObjCustomer=new Customer();

//init object
ObjCustomer.Name="";
--------------
------------

BLL.InsertCustomer(ObjCustomer)

------------------------------------------------

-------------------BLL---------------

DAL.InsertCustomer(ObjCustomer)

------------------------------------

-------------------DAL---------------

CustomerReporitory.InsertCustomer(ObjCustomer)

------------------------------------

Теперь проблема в том, что customer определен в DAL как часть EF.Не рекомендуется принимать DAL ref в PL.Я хочу передать пользовательский тип класса как customer как параметр.Как это сделать.Пожалуйста, дайте мне пример кода.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

Если ваша модель не имеет методов или функциональных возможностей и представляет собой просто набор свойств get / set, вы можете поместить ее в отдельную сборку / пространство имен и сделать так, чтобы все слои использовали модель как зависимость.Это рекомендуется только в очень простых приложениях и для всего более сложного использования подхода Тобиаса.

0 голосов
/ 12 февраля 2012

Заказчик на вашем уровне представления не должен быть Заказчиком из вашего бизнеса или уровня данных. Клиент на вашем уровне представления должен быть чем-то похожим на 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 */
    }
}
...