Есть ли другой подход? Да - не распространяйте свои объекты.
Самый масштабируемый подход - НЕ распределять ваши объекты друг от друга. Спросите себя, почему вы хотите развернуть один вариант кода на «сервере приложений», а другой вариант кода - на «веб-сервере»? Связь, которая происходит между этими двумя уровнями, если они распределены, будет намного намного (и т. Д.) Дороже, чем локальный вызов.
С сегодняшними 64-разрядными серверами, со всей этой памятью и горячими процессорами, а также с превосходным управлением памятью ASP.NET, почему бы не разместить свою бизнес-логику и DAL на той же физической машине, что и файлы ASPX? Почему бы и нет?
Если вам нужно масштабировать, добавьте больше серверов. Просто.
Конечно, есть веские причины для распространения. Наиболее распространенные веские причины связаны с областями собственности - по нескольким направлениям: управление безопасностью или даже бюджет и контроль. Другими словами, если взять последний случай, если за управление бизнес-логикой отвечает команда, а за создание и запуск веб-слоя отвечает отдельная команда, то может иметь смысл распределить эти две вещи, чтобы обеспечить независимость управления. Большинство веских причин для распространения компьютерного кода происходят из структур человеческих организаций, использующих или разрабатывающих код.
Нет хорошей технической причины, по которой веб-страница не должна работать на том же процессоре, совместно используя ту же виртуальную машину CLR и кучу памяти, что и уровень доступа к базе данных.
Независимо от того, что вы делаете с распределением, было бы неразумно проектировать вашу систему с менее формальными интерфейсами, определяющими связи между уровнями. Если вы сохраняете формальные интерфейсы, у вас не должно возникнуть проблем с измерением производительности и эффективности распределенного подхода по сравнению с совмещенным подходом.