Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
С одной стороны есть красивая и стройная стратегия доступа к данным. ADO.NET Entity Framework, LINQ to XXX и т.д. С другой стороны есть WCF для распределнного ПО. Вопрос такой. Как их совместить? Т.е. допустим я хочу иметь класс содержащий бизнес логику, логику доступа к данным и к тому же, что бы этот класс запускался на стороне сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 09:00 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
SlavaС одной стороны есть красивая и стройная стратегия доступа к данным. ADO.NET Entity Framework, LINQ to XXX и т.д. С другой стороны есть WCF для распределнного ПО. Вопрос такой. Как их совместить? Т.е. допустим я хочу иметь класс содержащий бизнес логику, логику доступа к данным и к тому же, что бы этот класс запускался на стороне сервера. Я по примеру делал, и это все работает!!! Круть просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 09:49 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
Да службу то понятное дело без труда можно сделать. Автор в конце пишет, что таким образом можно реализовать модель MVP. Вот этого примера мне не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 10:52 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
StockTrader курите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 11:47 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
Slavaмодель MVP Эх... Ну сделали мы эту модель. Причем получилось, что для каждой формы свой презентер и свой интерфейс и свой юзерконтрол. А их уже штук 15. Получилось так потому, что типов данных много, и они разные. Через один презентер не пролезли. Эту модель ,по-моему, стоит применять только если 100% будут разные отображения для одного и того же (а у нас их не будет - но так решило начальство. МВП ! звучит!). И то - может быть проще накидать контролов на форму и сделать привязку к ServiceReference. Что касается самой модели - то Все запросы (Linq итп) выполняет служба (бизнес логика), и возвращает или список или обьект презентеру, через proxy (ServiceReference), презентер вызывает метод интерфейса чтобы отдать юзерконтролу DataSource. Когда делается сохранение - Юзер контрол готовит измененный обьект, поднимает евент, презентер ловит евент и обьект в аргументах EventHandler и использует тот же proxy - чтобы вызвать метод службы для сохранения. В результате - Юзерконтрол не знает, что такое ServiceReference, презентер не знает, что такое Combobox. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 12:25 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
SlavaС одной стороны есть красивая и стройная стратегия доступа к данным. ADO.NET Entity Framework, LINQ to XXX и т.д. С другой стороны есть WCF для распределнного ПО. Вопрос такой. Как их совместить? Т.е. допустим я хочу иметь класс содержащий бизнес логику, логику доступа к данным и к тому же, что бы этот класс запускался на стороне сервера. SlavaMVP Совместить можно по-разному. Можно юзать LINQ на стороне сервера. Тут я постил пример. Можно и на клиенте юзать, получая от сервера IEnumerabl-ы. Не совсем ясны ваши проблемы. На этом форуме все Славики жгут? VBNET2000, РС2, теперь Slava из Томска ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 12:34 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
buredSlavaС одной стороны есть красивая и стройная стратегия доступа к данным. ADO.NET Entity Framework, LINQ to XXX и т.д. С другой стороны есть WCF для распределнного ПО. Вопрос такой. Как их совместить? Т.е. допустим я хочу иметь класс содержащий бизнес логику, логику доступа к данным и к тому же, что бы этот класс запускался на стороне сервера. SlavaMVP Совместить можно по-разному. Можно юзать LINQ на стороне сервера. Тут я постил пример. Можно и на клиенте юзать, получая от сервера IEnumerabl-ы. Не совсем ясны ваши проблемы. На этом форуме все Славики жгут? VBNET2000, РС2, теперь Slava из Томска Сейчас попробую потушить... Видите ли! Я знаком и с LINQ и с WCF и еще много с чем. В ваших примерах почему то отсутствует ADO.NET Entity Framework. А ведь если идти по пути мапинга реляционной структуры на классовую, то лучшего, чем ADO.NET Entity Framework не найти. Дело в том что LINQ, в первую очередь, решает задачу запросов к источнику данных. Ну а ADO.NET Entity Framework решает именно задачу мапинга. Скажем так умного мапинга. Так что рекомендую. И вообще. Нельзя ли оставлять коментарии не относящиеся к теме вопроса за рамками данной дискусии? Ранее я писал "Т.е. допустим я хочу иметь класс содержащий бизнес логику, логику доступа к данным и к тому же, что бы этот класс запускался на стороне сервера." Вот что я хотел сказать. Мапить реляционную структуру на классовую удобно при помощи LINQ или ADO.NET Entity Framework. Можно даже в полученные классы свою бизнес логику положить. Но это ж не путь! Что если я захочу перемапить? Хотя можно эти классы partial делать... Да и потом, что бы сделать классовую модель доступной удаленно, нужно покласть в проект ADO.NET Data Service. А это REST сценарий. Не вызывает доверия пока. Зато для WCF сервиса никакой ADO.NET Data Service не надо. Ее классы можно смело и так использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 14:30 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
Slava, пардон. Когда эти примеры писались, EF был ещё на ранних стадиях. Полагаю использование EF на стороне WCF-сервиса излишне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 14:38 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
bured, Ну вроде мапить так мапить. :) Вам понятно чего мне не понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 14:43 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
Slava, а теперь представьте какой огород получится, если сервисы будут с трансакциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 14:51 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
bured, COM+ чем то надо заменять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 15:05 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
Google выдал пару интересных статей. Using the Entity Framework in a Layered Architecture Updating data using Entity Framework in N-Tier and N-Layer Applications (short lived EF contexts) - (Part 1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 15:14 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
WCF позволяет использовать на клиенте реальные классы (а не сгенеренные), для этого нужно а) подключить сборку с классами б) когда делаете референс, в advanced поставить галку: reuse types...... получаем одинаковые классы на сервере и на клиенте, соответственно, их и передаём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 16:47 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
SlavaВам понятно чего мне не понятно? Не вполне. Если уж речь зашла о расслоении системы (напр., об этом пишет bured в своем в сообщении), то позвольте спросить, зачем на клиенте бизнес-объекты с их бизнес-логикой, место которым, по-моему, на сервере приложений в слое домена (или бизнес-логики) если хотите? WCF вполне может выступать в роле слоя-фасада, немногочисленные методы которого "дергают" многочисленные методы слоя бизнес-логики. Что именно он шлет на клиента - дело стопятое (DTO-data transfer objects в том или ином виде, датасеты или что другое, ясно, что не тяжелые бизнес-объекты - где же тут инкапсуляция бизнес-логики?). Клиентское приложение отвечает лишь за отображение полученных данных для пользователя, а также за ввод новой информации. Возможно, частично еще за валидацию введенных данных и ничего не знает о бизнес-логике, а также о том, где информация сохраняется в конечном итоге (в базе, в XML, других видах файлов), а знает лишь о методах, предоставляемых WCF, и DTO, которые эти данные переносят. По уму на стороне сервера приложений должен иметься слой доступа к хранилищу данных Data Access Layer, который ничего не знает о бизнес-логике, а занимается исключительно чтением и сохранением данных в БД. Слой бизнес-логики также ничего не знает ни о клиенте, ни о базе данных. EF, насколько я понимаю, строит те самые бизнес-объекты над реляционными таблицами БД, а сама бизнес-логика реализуется в partial классах, сгенирированных EF. Это так, грубо и вкратце. Извините, если непонятно описал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2009, 17:38 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
alexdrдатасеты или что другое, ясно, что не тяжелые бизнес-объекты - где же тут инкапсуляция бизнес-логики Все понятно! Спасибо за пост. Мне представляется что найти задачу, в которой бизнес объект в откопмилированном виде будет "тяжелее" датасета... Трудно. Возможно видео кодеки. Потом в случае WCF на клиенте только прокси Если не делать, того о чем пишет Gatman. А вообще в принципе, Вы все правильно пишите и вполне понятно. Я только не хочу делать partial классы и отделять доступ к данным от бизнесс логики. Здесь аж несколько причин. Если интересно напишу. Но именно это и произойдет если буду использовать LINQ и WCF, так как я понимаю их сейчас. bured Спасибо!!! По заголовкам именно то, что я искал в MSDN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 04:08 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
Напишите, если не сложно. Мне, было бы интересно услышать эти аргументы, потому что я не понимаю, что Вас останавливает от использования тонкой модели? Почему обязательно логика должна располагаться в тех же классах, что и данные? С EF и WCF Microsoft продвигает подход, когда логика выносится в так называемые "бизнес-компоненты", а сами объекты данных остаются просто набором public свойств (ну может на них навешивают атрибуты валидации и все), а вся логика выносится в отдельные классы с методами, которыми в качестве параметров передаются объекты данных (собственно, бизнес-компоненты). В результате вы имеете следующее: - EF продуцирует готовые "тонкие" бизнес-объекты, которые можно сразу использовать как DTO (кстати, стандартный генератор сразу же снабжает все классы и свойства EF-объектов нужными атрибутами) - методы бизнес-компонент могут сразу проецироваться на методы WCF сервисов. - если вас смущает необходимость каждый раз передавать методам компонент в качестве параметров объекты данных, то эти методы можно реализовать как extended-методы, только надо проверить, можно ли их тогда будет использовать в WCF. Вроде, довольно строгая схема получается... Может я просто не вижу каких-то скрытых подводных камней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 12:45 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
МихаилРНапишите, если не сложно. Мне, было бы интересно услышать эти аргументы, потому что я не понимаю, что Вас останавливает от использования тонкой модели? Почему обязательно логика должна располагаться в тех же классах, что и данные? С EF и WCF Microsoft продвигает подход, когда логика выносится в так называемые "бизнес-компоненты", а сами объекты данных остаются просто набором public свойств (ну может на них навешивают атрибуты валидации и все), а вся логика выносится в отдельные классы с методами, которыми в качестве параметров передаются объекты данных (собственно, бизнес-компоненты). Глупость получилась у нас когда решили следовать "подходу Микрософта". Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс. Дальше надо вызвать бизнес-логику производного обьекта. Как? Ведь они связаны только частью имени класса! Например - есть PersonRecordEntity и PersonRecordBL - получили PersonRecordEntity как baseEntity - и? Как узнать что нужно вызвать именно PersonRecordBL а не ComponentBL ? Выкрутились рефлекцией. А зачем? Ведь никогда (у нас это так) бизнес логика PersonRecord не будет использоваться без самой PersonRecord.... Я возмущался с самого начала! Но "Microsoft продвигает подход" .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 13:46 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
МихаилР, 1. У меня мало бизнес логики. Ее на слой не хватает. :) Не охото делать слой ради слоя и тем самым усложнять систему. 2. Partial. Была мысль сделать енту логику раширяемой. Т.е. тут какое-то решение нужно. Тут наверно замечу, что предполагал сделать базовую бизнес логику. А то по тексту получается 2 исключает 1. 3. Вот тут вообще пока запарка. Дело в том, что у меня несколько БД, включая Analysis Services. Есть мощьная система метаданных для SQL Server. Есть сервер на Remoting, занимающийся рассылкой сообщений(понятное дело до 3.5 и WCF писал). Ну как бы нерешаемых вопросов нет конечно, но не понятно было как WCF и EF совместить. bured! Именно то что надо было. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 14:46 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
D129 Глупость получилась у нас когда решили следовать "подходу Микрософта". Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс. Дальше надо вызвать бизнес-логику производного обьекта. Как? Ведь они связаны только частью имени класса! Интересный момент, надо подумать... Т.е. если коротко, то проблема возникла с вызовом виртуальных методов? Я правильно понял? У нас таких проблем не возникало, т.к. мы стараемся не ветвить без необходимости иерархию, и везде работа в бизнес-слое идет непосредственно с тем типом, который нужен, а не с базовым. Спасибо, что подбросили пищу для размышления! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 18:19 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
МихаилРD129... Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс... Интересный момент, надо подумать... Зачем думать над тем, что не имеет практического смысла (ИМХО): если клиент получает производный объект для отображения (или еще для чего-то там?), то почему он вдруг должен возвращать базовый? (не вижу объективных предпосылок для такого поведения). По-моему это все от желания "оптимизировать" сверх меры то, что оптимизации не подлежит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:21 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
Slava1. У меня мало бизнес логики. Ее на слой не хватает. :) Не охото делать слой ради слоя и тем самым усложнять систему. Slava, отдельный слой для бизнес-логики обычно выделяется вне зависимости от того, мало ее или нет. Бизнес-логика это такая штука, которая имеет обыкновение очень часто меняться вне зависимости от желаний разработчика (такова жизнь). Если приложение пишется не на два-три месяца, то "размазывание" бизнес-логике по клиенту, серверу приложений и БД (напр., через частичную ее реализацию в ХП) приведет к тому, что очень быстро система станет неподдерживаемой. Любое изменение в бизнес-правилах будет означать переписывание кода по всему приложению, что является задачей более чем не тривиальной... Вот на такие грабли можно наступить еще при проектировании приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:41 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
D129, 17.03.2009 13:46 [6937685] >... Например - клиент возвращает обьект ... До сих пор считаю, что WCF работает с сериализованными версиями объектов. С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:17 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
qu-quМихаилРD129... Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс... Интересный момент, надо подумать... Зачем думать над тем, что не имеет практического смысла (ИМХО): если клиент получает производный объект для отображения (или еще для чего-то там?), то почему он вдруг должен возвращать базовый? (не вижу объективных предпосылок для такого поведения). По-моему это все от желания "оптимизировать" сверх меры то, что оптимизации не подлежит... Да, вызов виртуальных методов бизнес-логики. (Save, Delete, Update, Load)... Вышло так :есть базовый класс - в нем есть базовые свойства для отображения - Id, Description, CreateDate. Производный класс - дополняет еще например LocationX , LocationY А другие - что-то свое. Клиент получает по методу Load - базовый класс, который "дернут" методом из соответственной бизнес логики по ключу (имени типа и Id обьекта). Изменяет его и вызывает Save WCF сервиса - c передачей обьекта (производного) приведенного к базовому типу. Дальше сервис должен вызвать Save бизнес логики. А какой? Ее же взяли и отделили от обьекта. И получается изврат - поиск бизнес-логики опять по ключу. Если делать не так - то все просто - но выходит, что надо делать сервисы (по 4 штуки) для каждого производного класса. А их уже 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:27 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
ВМоисеевD129, 17.03.2009 13:46 [6937685] >... Например - клиент возвращает обьект ... До сих пор считаю, что WCF работает с сериализованными версиями объектов. С уважением, Владимир. Да это уже не наша проблема. Сериализованными, переписанными от руки... по факту - метод WCF вызван, передан класс как параметр - оператор new выполнился где-то в недрах дотнета... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:31 |
|
||
|
Вопрос к тем кто WCF применяет
|
|||
|---|---|---|---|
|
#18+
D129qu-quМихаилРD129... Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс... Интересный момент, надо подумать... Зачем думать над тем, что не имеет практического смысла (ИМХО): если клиент получает производный объект для отображения (или еще для чего-то там?), то почему он вдруг должен возвращать базовый? (не вижу объективных предпосылок для такого поведения). По-моему это все от желания "оптимизировать" сверх меры то, что оптимизации не подлежит... Да, вызов виртуальных методов бизнес-логики. (Save, Delete, Update, Load)... Вышло так :есть базовый класс - в нем есть базовые свойства для отображения - Id, Description, CreateDate. Производный класс - дополняет еще например LocationX , LocationY А другие - что-то свое. Клиент получает по методу Load - базовый класс, который "дернут" методом из соответственной бизнес логики по ключу (имени типа и Id обьекта). Изменяет его и вызывает Save WCF сервиса - c передачей обьекта (производного) приведенного к базовому типу. Дальше сервис должен вызвать Save бизнес логики. А какой? Ее же взяли и отделили от обьекта. И получается изврат - поиск бизнес-логики опять по ключу. Если делать не так - то все просто - но выходит, что надо делать сервисы (по 4 штуки) для каждого производного класса. А их уже 24. Ай-яй-яй, Данатас, как не стыдно... (впрочем, вы наверняка не стояли у истоков того, чем приходится пользоваться сейчас в виде данности). А по теме - "виртуальные методы бизнес-логики. (Save, Delete, Update, Load)" это что-то несусветное, т.к. по факту это чистейший CRUD, который по определению к "бизнес-логике" не имеет никакого отношения, а должен быть засунут глубоко в DAL на самом генериковом уровне... З.Ы. счаз нет времени на подробное обсуждение... потом договорим обязательно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 13:02 |
|
||
|
|

start [/forum/topic.php?fid=19&fpage=33&tid=1397909]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 281ms |
| total: | 434ms |

| 0 / 0 |
