Как использовать DTO между UI, BLL, DAL

Я пытаюсь написать небольшое приложение с очень строгими границами между BLL и DAL, и теперь мне интересно, как лучше всего передавать данные (объекты передачи домена) между слоями.

Я реализовал некоторые классы на уровне домена (библиотека классов), доступ к которому осуществляется как BLL, так и DAL. Эти классы в основном просто содержат свойства / элементы данных и в настоящее время отражают данные DAL. Пример:

class CustomerData
{
  // some data fields
}

Затем я реализовал некоторые классы в BLL как:

class Customer : CustomerData
{
  // Some methods
}

В моем DAL я получаю записи клиентов из базы данных через Linq-to-Sql. Затем я сопоставляю объект linq с объектом моего домена следующим образом:

CustomerData.field = LinqObject.field
// Etc

Я думаю, что теперь я являюсь экземпляром CustomerData из моего DAL в BLL по запросу (и что я должен передать экземпляр Customer в свой пользовательский интерфейс).

В my BLL Таким образом я получу экземпляр CustomerData, но теперь я хочу сделать из него клиента.

Вопросы:

  1. Должен ли я теперь в моем BLL создавать экземпляр клиента и СНОВА копировать все элементы поля?
    Эти классы в основном просто содержат свойства / элементы данных и в настоящее время отражают данные DAL. Пример:

    class CustomerData
    {
      // some data fields
    }
    

    Затем я реализовал некоторые классы в BLL как:

    class Customer : CustomerData
    {
      // Some methods
    }
    

    В моем DAL я получаю записи клиентов из базы данных через Linq-to-Sql. Затем я сопоставляю объект linq с объектом моего домена следующим образом:

    CustomerData.field = LinqObject.field
    // Etc
    

    Я думаю, что теперь я являюсь экземпляром CustomerData из моего DAL в BLL по запросу (и что я должен передать экземпляр Customer в свой пользовательский интерфейс).

    В my BLL Таким образом я получу экземпляр CustomerData, но теперь я хочу сделать из него клиента.

    Вопросы:

    1. Должен ли я теперь в моем BLL создавать экземпляр клиента и СНОВА копировать все элементы поля?
      Эти классы в основном просто содержат свойства / элементы данных и в настоящее время отражают данные DAL. Пример:

      class CustomerData
      {
        // some data fields
      }
      

      Затем я реализовал некоторые классы в BLL как:

      class Customer : CustomerData
      {
        // Some methods
      }
      

      В моем DAL я получаю записи клиентов из базы данных через Linq-to-Sql. Затем я сопоставляю объект linq с объектом моего домена следующим образом:

      CustomerData.field = LinqObject.field
      // Etc
      

      Я думаю, что теперь я являюсь экземпляром CustomerData из моего DAL в BLL по запросу (и что я должен передать экземпляр Customer в свой пользовательский интерфейс).

      В my BLL Таким образом я получу экземпляр CustomerData, но теперь я хочу сделать из него клиента.

      Вопросы:

      1. Должен ли я теперь в моем BLL создавать экземпляр клиента и СНОВА копировать все элементы поля?
        Затем я сопоставляю объект linq с объектом моего домена следующим образом:

        CustomerData.field = LinqObject.field
        // Etc
        

        Я думаю, что теперь я являюсь экземпляром CustomerData из моего DAL в BLL по запросу (и что я должен передать экземпляр Customer в свой пользовательский интерфейс).

        В my BLL Таким образом я получу экземпляр CustomerData, но теперь я хочу сделать из него Customer.

        Вопросы:

        1. Должен ли я теперь в моем BLL создавать экземпляр клиента и СНОВА копировать все элементы поля?
          Затем я сопоставляю объект linq с объектом моего домена следующим образом:

          CustomerData.field = LinqObject.field
          // Etc
          

          Я думаю, что теперь я являюсь экземпляром CustomerData из моего DAL в BLL по запросу (и что я должен передать экземпляр Customer в свой пользовательский интерфейс).

          В my BLL Таким образом я получу экземпляр CustomerData, но теперь я хочу сделать из него Customer.

          Вопросы:

          1. Должен ли я теперь в моем BLL создавать экземпляр клиента и СНОВА копировать все элементы поля?
            Клиент c = новый Клиент; c.field = CustomerData.field;
          2. Как я могу создать клиента из CustomerData без шагов копирования поля?
          3. Следует ли мне использовать композицию?
            класс Клиент { Данные CustomerData; }
          4. Есть ли более эффективный способ (меньше кода и т. Д.) Сделать это в моем текущем макете?
          5. Есть ли лучшие способы сделать это?
          6. Есть общие комментарии?

          Спасибо!

5
задан SWeko 14 January 2011 в 12:22
поделиться