Alexey's profileLife vs. ProgrammingPhotosBlogListsMore ![]() | Help |
|
March 24 Российская обувь в БельгииСегодня, гуляя по городу, встретили на "развале" коробки с обувью российской марки "Ральф Рингер". На коробках даже надписи сделаны по-русски. Помимо самого факта удивило две вещи: 1) Цена. Пара ботинок стоила 20 евро. Поскольку я носил обувь от "Ральфа" и знаю, что она из себя представляет (и сколько стоит), то могу допустить, что здесь продавались подделки. В этом смысле ситуация становится еще более интересной: тут ведь практически нет подделок (хотя это в магазинах, на развалах, вероятно, полно) и подделывают обычно престижные фирмы типа Экко и т.д... А подделка обуви российского производителя, причем даже с коробками на русском языке выглядит странной :) Впрочем, в прошлом году осенью я был в России и пытался купить себе ботинки этой фирмы.. Но не смог - ассортимент был нехороший, да и качество, как мне показалось, упало. Быть может оно упало еще ниже и это был оригинал? Но цена в 20 евро все равно удивляет. March 14 О кочевникахТолько что посмотрел фильм "Кочевник". Однако это все ерунда. Когда мы заспорили с женой и полезли искать факты в интернете, то оказалось, что то, что я всю жизнь знал под названием "кызыл-орда", оказывается, называется в России "золотая орда" и преподается в российских (по крайней мере в подмосковных) школах под этим названием :) Прикольно. Видимо, "кызыл" - это "золото" по-казахски. Столько лет прошло, а я продолжаю "изучать" казахский язык, по которому у меня тройка в аттестате. Да и то благодаря состраданию учительницы, ибо молчал на экзамене как партизан.... :) WebServices: что может быть проще?В последнее время ничего не пишу - сижу, ковыряюсь с WPF. Нравится очень, гибкость офигительная, но многое нужно постигать как бы сначала... Впрочем, об этом в другой раз, а пока вернусь к веб-сервисам. Писать этот постинг меня сподвигло то, что сразу с двумя человеками из разных компаний и разных городов недавно разговаривал о том, как (и почему именно так) нужно строить архитектуру при работе с веб-сервисами. Итак, начнем есть трехслойный пирог (серверная логика, веб-сервисы, клиентская логика) с середины, то есть, со слоя веб-сервисов. Создавая слой веб-сервисов мы создаем контракт между двумя остальными частями (серверной и клиентской). Сам же слой представляет собой набор доступных операций, этакий API, для слоя клиентской логики и является не более, чем клиентом для слоя логики серверной. Отсюда вытекает простая рекомендация: не нужно передавать клиентскому приложению объекты бизнес-модели серверной логики. С точки зрения развития и поддержки приложения, я бы даже сказал "никогда не нужно". Создавайте отдельные объекты для передачи посредством веб-сервисов. Такие объекты называются "контрактами данных" (Data Contracts). Зачем это нужно? Очень просто. Как я уже сказал, клиентское приложение, пользуясь веб-сервисом Reports, совершенно не заинтересовано "знать" бизнес-модель серверной части. И для него бизнес-сущность "User" вовсе не является набором "запись в таблицу Users + ссылка в таблицу Occupations + ссылка в таблицу Departments + 2 ссылки в таблицу Addresses по их IDшникам". Ему и надо-то воспользоваться сервисом Reports всего лишь для того, чтобы этот самый репорт отобразить, и для него User - это "монолитный" объект со всеми необходимыми адресами, должностями и т.д. А вот информация о паролях, логинах, ролях и т.д. ему совершенно не нужна, поэтому и передавать ее в сервисе Reports не за чем. - Счастливы в том числе и разработчики серверной логики, которые могут модифицировать объекты бизнес-логики, не боясь "сломать" интерфейс между сервером и клиентами. Счастливы, в конце концов, те, кому все это потом поддерживать. Ибо в данном случае слои получаются слабо связанными, легко понимаемыми и легко модифицируемыми (в том числе и независимо друг от друга). Кстати, еще о клиентской части. Первый: Вы получаете для работы "нормальные" бизнес-объекты, наделенные необходимым поведением, необходимыми свойствами, нужными для работы клиентской части приложения и т.д. Это гораздо лучше, легче, да и правильнее с точки зрения ООП, работать с объектами бизнес-модели, нежели с "безликими" наборами данных, которые вы будете пихать по очереди в немереную кучу классов-обработчиков, которые будут как-то манипулировать этими данными. В небольших (по функциональности и времени поддержки) приложениях это еще куда ни шло, но в случае серьезных проектов вы рискуете если не потерять контроль над сложностью системы, то наплодить кучу лишних обходных путей (представьте себе судьбу того, кому в этих "заплатках" потом разбираться), вместо того, чтобы продолжать работать в рамках объектно-ориентированной парадигмы. Второй: Вы сами контролируете объекты, с которыми вы работаете. Итак, коротко обобщим основные рекомендации:
Словом, воспринимайте веб-сервисы, как средство передачи данных, а не объектов бизнес-модели. И будет вам простота разработки, и вы будете избавлены от необходимости поддерживать совершенно немодифицируемый (в силу очень сильной связанности всего и вся) код с разбросанным по разным местам поведением. Пример (упрощенный) веб-метода, возвращающего данные о производителе товара:
Здесь ManufacturerGetById - это класс-action, умеющий вернуть сложный объект бизнес-модели серверной части по его идентификатору. Далее он трансформируется в простой объект контракта данных Brand, который и будет предоставлен клиенту. Клиент же, получив эти данные, таким же способом заполняет ими свой объект |
|
|