Вопрос

Как передать данные слоям в многоуровневом приложении?Я наметил 3 разных метода.

А)универсальные объекты .net, универсальные таблицы данных, хеш-таблицы, универсальные наборы данных, строки, целые числа и т. д.затем используйте наборы данных для заполнения ваших бизнес-объектов, которые отправляются на уровень пользовательского интерфейса.

альтернативный текст http://img11.imageshack.us/img11/460/generic.png

http://dabbleboard.com/draw?b=eiu165&i=26&c=54eef6f1ac01f03c85919518f4a24e798e57e133

Про- Никаких дополнительных слоев не требуетсяПротив- Приходится работать с универсальными наборами данных и таблицами на бизнес-уровне.

Б)используя слой сущностей, на который будут ссылаться другие слои.Этот уровень будет содержать либо строго типизированные наборы данных, либо обычные объекты C.Объектами будут в основном данные контейнера и очень мало логики.это будут те же самые объекты, отправленные на уровень пользовательского интерфейса.

альтернативный текст http://img8.imageshack.us/img8/6454/entities.png

http://dabbleboard.com/draw?b=eiu165&i=6&c=d0c2b346894a96b12bd3867f630e474a2af098fa

Про- работа с одними и теми же классами во всех слояхПротив- добавление ссылки на юридические лица.dll во все слои

С)использовать объекты передачи данных (только объекты-конатинеры), определенные на уровне доступа к данным.затем используя эти объекты для заполнения бизнес-объектов, которые отправляются на уровень пользовательского интерфейса.

альтернативный текст http://img43.imageshack.us/img43/1236/transferp.png

http://dabbleboard.com/draw?b=eiu165&i=27&c=f886efa3f9d5eb4b45ddb02361c79cdcdaec0a9b

Про- бизнес-уровень не должен будет работать с универсальными классамиПротив- работая с двумя типами объектов, вам придется гидратировать бизнес-объекты с помощью объектов переноса.

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

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

Решение

Если вы используете слоистый подход, означающий, что все уровни (по сути) выполняются в одном и том же пространстве процессов и, следовательно, нет маршаллинга/сериализации, я бы выбрал подход B.Создайте отдельный модуль для своих сущностей, от которого зависят все аспекты вашей программы, и соедините с ним.

Однако если вы используете многоуровневый Подход, как следует из названия, означает, что существуют границы процесса и/или сети, которые пересекаются, я бы предложил вам использовать подход C.На самом деле вы не передаете экземпляры, вы передаете копии, поэтому любые преимущества, которые вы получаете от связи с одним и тем же объектом, такие как наблюдаемые параметры, скажем, для подхода MVC, в любом случае теряются.Лучше определить API данных на каждом уровне, чем пытаться использовать один и тот же класс повсюду.

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

Отличный вопрос – как всегда, ответ должен быть «это зависит».

От типа приложения и от того, действительно ли существует необходимость иметь бизнес-объекты (сущности), а не объекты переноса (т. е. упрощенные бизнес-объекты, которые больше соответствуют объектам базы данных).

Традиционно я бы сказал, что вам всегда нужны общие наборы данных (или таблицы данных) исключительно из соображений производительности.Всякий раз, когда возникает необходимость работать с большими наборами, отображать их или манипулировать ими, традиционный строгий объектно-ориентированный способ создания экземпляров большого количества бизнес-объектов терпит неудачу.

Однако с тех пор, как я начал работать с Linq to SQL, мои парадигмы изменились.В этом больше нет необходимости вообще, поскольку модель Linq может быть чем угодно — бизнес-объектами, объектами переноса и универсальными наборами данных.Я еще не исследовал, насколько хорошо это работает в действительно больших приложениях и есть ли необходимость изолировать интерфейсный код от модели Linq.Я обсуждал этот вопрос с коллегами, но так и не нашел ответа.

Мне нравится вариант C, но он заставляет меня задуматься по двум причинам:

  1. Мне приходится распространять знания о том, что такое собственность, во многих местах.
  2. DTO должны быть сериализуемыми, что не так уж и плохо, но все же необходимо учитывать.

Я предполагаю, что все три слоя существуют в одном приложении.По крайней мере, в Java я использовал Hibernate для доступа к данным и использовал эти компоненты данных на всех уровнях.(вариант Б) Имеет смысл иметь возможность повторно использовать объекты в слоях.

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