Mang Irpan Ответов: 1

Как слой / уровень взаимодействуют друг с другом между машиной/уровнем в архитектуре n уровней


В моем проекте (настольном приложении) я разделяю бизнес-логику и уровень презентации, но запускаю их на одной машине. Итак, вот состав:
A. уровень презентации и бизнес-уровень выполняются на стороне клиента (пользователя).
Он состоит из 2-х проектов / сборок: пользовательского интерфейса (презентация) и библиотеки классов(бизнес-слой). По крайней мере, это то, что я знаю о многослойности приложения.
B. уровень данных (сервер баз данных).

Прочитав много статей об архитектуре 3 и n уровней, они сказали, что каждый уровень означает одну машину или работает на одном компьютере. Интересно, как каждый уровень общается?
Например, я хочу привязать данные из уровня доступа к данным к пользовательскому интерфейсу. Как мы можем это сделать, если они работают на другой машине?
В моем текущем проекте я просто добавляю библиотеку классов, которая действует как уровень доступа к данным в качестве ссылки на проект.

Является ли веб-сервис (единственным) ответом, чтобы сделать это возможным? И если ответ "да", то как связаны SOA и N-уровень?

Что я уже пробовал:

Прочитав много статей и попробовав реализовать SOA

[no name]

-они сказали, что каждый уровень означает одну машину или работает на одном компьютере. Можете ли вы показать ссылки на эти "статьи", в которых говорится об этом? Некоторые слои могут работать на других компьютерах, но все слои могут работать на одном компьютере. Если вы создаете распределенную архитектуру, то вы можете использовать WCF, чтобы позволить вашим компонентам взаимодействовать друг с другом.

Mang Irpan

Вот пример, если я не скучаю, понял об этом:
https://www.codeproject.com/Articles/430014/N-Tier-Architecture-and-Tips

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

На самом деле я не хочу говорить об этих терминах, я просто хочу знать более конкретный вопрос: возможно ли это, если мы разделим слои на разные компьютеры и не будем использовать веб-сервис/или wcf для соединения между слоями (вы сказали, что я мог бы использовать wcf для этого). Или это единственный способ заставить компоненты взаимодействовать, например потреблять данные, объявлять экземпляры и использовать их сущности?

Но если вы хотите прояснить мое понимание n-го уровня, пожалуйста, дайте мне несколько советов. Спасибо.

[no name]

Я думаю, что вы ужасно запутались и не поняли тогда статью, на которую ссылались, если у вас получилось, что каждый уровень работает на отдельном компьютере. Если вы не используете какую-то коммуникационную среду, позволяющую вашим компонентам, работающим на разных компьютерах, общаться друг с другом, то как, черт возьми, вы ожидаете, что они будут общаться? Вы должны дать им возможность каким-то образом общаться. Если вы не хотите использовать веб-службу или WCF, используйте необработанный TCP / IP.

Mang Irpan

Есть 3 возможности:
1. Мой английский плох
2. я ужасно запутался, как вы сказали. Хаха
3. 1 и 2

Но это отражает мое понимание до сих пор.
Необработанный tcp / ip? Я собираюсь погуглить его.
Спасибо

1 Ответов

Рейтинг:
4

F-ES Sitecore

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

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

Если вы хотите разделить код между серверами или процессами, тогда это не сработает, поэтому вам нужно будет использовать подобные WCF. Обратите внимание, что WCF - это не «веб-службы». HTTP-связь - это просто один из вариантов, доступных WCF, когда дело доходит до связи между клиентом и сервером. Думайте о взаимодействии WCF как о черном ящике ... ваш код создает клиентский объект и вызывает метод этого клиента. В конечном итоге тот же метод выполняется на сервере, и то, как работает бит посередине, не имеет значения ... WCF просто обрабатывает его за вас, и все зависит от конфигурации. Таким образом, вы можете настроить это на использование http, поскольку ваш бизнес-уровень размещается где-то извне, а позже вы решите, что хотите более высокую производительность, поэтому перенесите уровень приложения в свою локальную сеть и хотите использовать TCP, а не HTTP. Для этого просто нужно перенастроить WCF для использования TCP, а не HTTP, вам не нужно менять свой код, ваш код не знает и не заботится о том, как WCF передает ваши запросы. Кроме того, вы по-прежнему можете размещать все уровни на одном компьютере, если хотите, а затем разделить на разные машины позже, и снова это просто зависит от того, как вы настраиваете WCF, никаких изменений кода не требуется.


Mang Irpan

Спасибо за подробное объяснение. А также для краткого объяснения wcf.