эти два нельзя сравнивать, потому что каждый из них описывает разные вещи.Также имейте в виду, что уровень не совпадает с уровнем.
уровень - граница процесса.Когда вы создаете трехуровневое приложение, вы знаете, что пользовательский интерфейс, BL и DB будут находиться в трех разных процессах, которые могут быть на трех разных машинах.
Уровень - логическая граница.Один уровень может содержать несколько слоев.Это просто способ, с помощью которого вы строите свое приложение, следуя принципам OO.
SOA - SOA-приложение может быть многоуровневым и многоуровневым, но обычно это не обязательно.SOA - это подход к архитектуре приложения в смысле многократно используемых автономно взаимодействующих удаленно называемых компонентов.Сервисы SOA должны следовать четырем принципам .
Чтобы показать простую разницу между N-Tier и SOA, давайте предположим, что вы строите сервисный уровень поверх бизнес-логики, которая использует некоторую базу данных.Похоже, вы создаете приложение N-Tier SOA, не так ли?К сожалению, не все приложения, предоставляющие услуги, следуют этим принципам.Вероятно, наиболее важными в этом случае являются «Явная граница обслуживания» и «Услуги являются автономными».Если ваши сервисы совместно используют некоторые функции бизнес-логики или данные в базе данных, они не имеют явной границы и не являются автономными => приложение не спроектировано как SOA.
Существует также разница между малым SOA и большим SOA,Упомянутое приложение - это небольшая SOA - каждый сервис должен следовать принципам.Большая SOA предназначена для корпоративной интеграции, где вы считаете приложение со всеми его сервисами как единое целое, которое должно следовать принципам.
С уважением, Ладислав