Имеется такое требование к системе как поддержка разнородных клиентов, будут как минимум win клиент, web и mobile (типа айпада) клиенты, также не исключена возможность linux клиентов. Я так понимаю, организовав сервер приложений содержащий всю логику и имеющий интерфейс в виде вебсервисов, будет возможно быстрое создание тонких клиентов для фактически любой платформы.
Возник вопрос в каком собственно виде передавать данные этим клиентам. Стандартный совет в таких случаях — использование DTO, т.е. обьектов, содержащих только read-only проперти. Передавать бизнес-объекты нельзя, т.к. в таком случае никакого третьего звена и не надо будет — клиенты просто станут толстыми т.к. сами смогут манипулировать BL. Однако DTO по сути ведь тоже классы, все тонкие клиенты должны будут иметь ссылку на библиотеку с классами DTO что-бы понимать сообщения от аппсервера. Если-же мы все равно даем ссылку на библиотеку с набором DTO, так почему-бы не дать сразу ссылку на бизнес-обьекты и соответственно трехзвенка тут становиться просто ненужной.
Если-же в качестве DTO использовать к примеру DataTable или DataSet, то будет невозможно создание клиентов на платформах, где отсутствует .NET (linux, IPAd).
В чем-же тогда глубинный смысл 3-tier систем? Только производительность? Так обработка бизнес-логики уж точно самое нетребовательное место в системе, пользовательский интерфейс и база данных будут отьедать основную часть ресурсов.
Вообще, из прочтения дискурсий по этому поводу на данном форуме создается впечатление, что понятие tier приравнивают к layer, обсуждают выгоду выноса логики из БД в ОО обьекты, выгоды от этого и так понятны, а вот какие именно выгоды от выноса логики именно на отдельный tier мне найти не удалось. Максимум что нашел — это независимость тонких клиентов от классов бизнес-логики, но раз у них все равно появляется при этом зависимость от классов DTO — то зачем менять шило на мыло?