Вопрос

У меня есть приложение ASP.NET с трехуровневой архитектурой:

  • Уровень представления:АСП.НЕТ

  • Бизнес-уровень:библиотека С#.

  • Уровень доступа к данным:библиотека C# с
    Объекты ADO.Net Entity Framework.

Некоторые методы на уровне бизнеса возвращают объекты сущностей ADO.NET, но уровень доступа к данным не виден на уровне представления. Я не могу этого сделать.

Мой вопрос:С точки зрения дизайна: правильно ли предоставлять объекты Entity на уровне представления?Я думаю, мне нужно только связать библиотеку уровня данных с приложением ASP.NET.

Спасибо!

Это было полезно?

Решение

Я предлагаю вам изучить концепции объектов просмотра... или объектов передачи данных (DTO).Вы можете рассмотреть возможность использования такого инструмента, как AutoMapper или аналогичного, который создаст объект домена для просмотра из ваших сущностей.В общем, у вас могут быть экраны, которым требуется присутствие сущности для выполнения своей работы.Но чаще всего вам придется передать несколько разных сущностей.В этом случае вам лучше создать один DTO, содержащий все эти объекты.Делая это, вы добавляете уровень разделения между уровнем представления и бизнес-уровнем.Часто ваши сущности обладают большей мощностью, чем вы хотели бы предоставить на уровне представления.И наоборот.Часто вам может потребоваться передать некоторые сообщения пользовательского интерфейса на уровень представления на основе некоторой проверки, отмеченной на вашем бизнес-уровне.Вместо того, чтобы делать ваш пользовательский интерфейс более сложным, чем он должен быть (путем передачи полных объектов), вы можете передать только то, что нужно пользовательскому интерфейсу, в форме DTO.Кроме того, вашим бизнес-объектам никогда не потребуется заботиться о чем-то конкретном, относящемся к уровню представления.Я предлагаю вам не привязывать данные напрямую ни к чему, вплоть до уровня доступа к данным.Технически ваш уровень представления должен знать как можно меньше о вашем бизнес-уровне.В случае MVP или MVC этого очень легко добиться, отключив переднюю часть и внутреннюю часть посредством дополнительного разделения!

Другие советы

Абсолютно желательно, чтобы ваши объекты сущностей были доступны для использования и потребления на уровне представления.Вот для чего вся работа.

  • Привязка коллекции объектов к сетке/списку/выпадающему списку
  • Разбрызгивание одного объекта (т.е.клиент) в форму для чтения/обновления/удаления

Это значительно облегчает вашу жизнь.В противном случае вам придется передавать строку после int после двойной строки между презентацией и бизнес-уровнями.

Это могут быть объекты Entity или даже ваши собственные объекты POCO, которые были гидратированы из объектов Entity.

Я бы даже сказал, что ваши сущности должны находиться в своем собственном собрании, отдельном от DAL.

Я думаю, нет, это не так, лучший способ сделать это - отделить классы данных от поведения и ссылаться только на классы данных на уровне представления. Я думаю, что хороший подход к использованию WCF см. связь

Видеть Контролер-контролер и Пассивный просмотр

Если вы передаете Сущность, вы, по сути, являетесь Контролирующим контроллером.В противном случае вы пассивный взгляд.

Надзор за контроллером требует меньше работы, но и менее поддается тестированию.Контроллер наблюдения также сообщает, что привязка данных в порядке.Пассивное представление можно протестировать, но нужно НАМНОГО больше работы.Никакой привязки данных.Много недвижимости.

Обычно я придерживаюсь Супервайзера.Обычно вам не нужен такой уровень тестируемости, и он не стоит дополнительных усилий.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top