powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вопрос к тем кто WCF применяет
25 сообщений из 30, страница 1 из 2
Вопрос к тем кто WCF применяет
    #35870501
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С одной стороны есть красивая и стройная стратегия доступа к данным. ADO.NET Entity Framework, LINQ to XXX и т.д. С другой стороны есть WCF для распределнного ПО. Вопрос такой. Как их совместить?
Т.е. допустим я хочу иметь класс содержащий бизнес логику, логику доступа к данным и к тому же, что бы этот класс запускался на стороне сервера.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35870602
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavaС одной стороны есть красивая и стройная стратегия доступа к данным. ADO.NET Entity Framework, LINQ to XXX и т.д. С другой стороны есть WCF для распределнного ПО. Вопрос такой. Как их совместить?
Т.е. допустим я хочу иметь класс содержащий бизнес логику, логику доступа к данным и к тому же, что бы этот класс запускался на стороне сервера.

Я по примеру делал, и это все работает!!! Круть просто.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35870801
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да службу то понятное дело без труда можно сделать. Автор в конце пишет, что таким образом можно реализовать модель MVP. Вот этого примера мне не хватает.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871001
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StockTrader курите
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871151
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slavaмодель MVP
Эх... Ну сделали мы эту модель. Причем получилось, что для каждой формы свой презентер и свой интерфейс и свой юзерконтрол.
А их уже штук 15.
Получилось так потому, что типов данных много, и они разные. Через один презентер не пролезли.
Эту модель ,по-моему, стоит применять только если 100% будут разные отображения для одного и того же (а у нас их не будет - но так решило начальство. МВП ! звучит!). И то - может быть проще накидать контролов на форму и сделать привязку к ServiceReference.

Что касается самой модели - то
Все запросы (Linq итп) выполняет служба (бизнес логика), и возвращает или список или обьект презентеру, через proxy (ServiceReference), презентер вызывает метод интерфейса чтобы отдать юзерконтролу DataSource.
Когда делается сохранение - Юзер контрол готовит измененный обьект, поднимает евент, презентер ловит евент и обьект в аргументах EventHandler и использует тот же proxy - чтобы вызвать метод службы для сохранения.
В результате - Юзерконтрол не знает, что такое ServiceReference, презентер не знает, что такое Combobox.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871191
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavaС одной стороны есть красивая и стройная стратегия доступа к данным. ADO.NET Entity Framework, LINQ to XXX и т.д. С другой стороны есть WCF для распределнного ПО. Вопрос такой. Как их совместить?
Т.е. допустим я хочу иметь класс содержащий бизнес логику, логику доступа к данным и к тому же, что бы этот класс запускался на стороне сервера.
SlavaMVP
Совместить можно по-разному. Можно юзать LINQ на стороне сервера. Тут я постил пример. Можно и на клиенте юзать, получая от сервера IEnumerabl-ы.
Не совсем ясны ваши проблемы.
На этом форуме все Славики жгут? VBNET2000, РС2, теперь Slava из Томска
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871633
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 не надо. Ее классы можно смело и так использовать.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871660
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava,

пардон.

Когда эти примеры писались, EF был ещё на ранних стадиях.
Полагаю использование EF на стороне WCF-сервиса излишне.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871672
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bured,

Ну вроде мапить так мапить. :)
Вам понятно чего мне не понятно?
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871695
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava,

а теперь представьте какой огород получится, если сервисы будут с трансакциями.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871739
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bured,

COM+ чем то надо заменять.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35871769
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35872086
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WCF позволяет использовать на клиенте реальные классы (а не сгенеренные), для этого нужно
а) подключить сборку с классами
б) когда делаете референс, в advanced поставить галку: reuse types......
получаем одинаковые классы на сервере и на клиенте, соответственно, их и передаём.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35872242
alexdr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SlavaВам понятно чего мне не понятно?
Не вполне. Если уж речь зашла о расслоении системы (напр., об этом пишет bured в своем в сообщении), то позвольте спросить, зачем на клиенте бизнес-объекты с их бизнес-логикой, место которым, по-моему, на сервере приложений в слое домена (или бизнес-логики) если хотите?

WCF вполне может выступать в роле слоя-фасада, немногочисленные методы которого "дергают" многочисленные методы слоя бизнес-логики. Что именно он шлет на клиента - дело стопятое (DTO-data transfer objects в том или ином виде, датасеты или что другое, ясно, что не тяжелые бизнес-объекты - где же тут инкапсуляция бизнес-логики?).

Клиентское приложение отвечает лишь за отображение полученных данных для пользователя, а также за ввод новой информации. Возможно, частично еще за валидацию введенных данных и ничего не знает о бизнес-логике, а также о том, где информация сохраняется в конечном итоге (в базе, в XML, других видах файлов), а знает лишь о методах, предоставляемых WCF, и DTO, которые эти данные переносят.

По уму на стороне сервера приложений должен иметься слой доступа к хранилищу данных Data Access Layer, который ничего не знает о бизнес-логике, а занимается исключительно чтением и сохранением данных в БД.

Слой бизнес-логики также ничего не знает ни о клиенте, ни о базе данных.

EF, насколько я понимаю, строит те самые бизнес-объекты над реляционными таблицами БД, а сама бизнес-логика реализуется в partial классах, сгенирированных EF.

Это так, грубо и вкратце. Извините, если непонятно описал.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35872968
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexdrдатасеты или что другое, ясно, что не тяжелые бизнес-объекты - где же тут инкапсуляция бизнес-логики
Все понятно! Спасибо за пост. Мне представляется что найти задачу, в которой бизнес объект в откопмилированном виде будет "тяжелее" датасета... Трудно. Возможно видео кодеки. Потом в случае WCF на клиенте только прокси Если не делать, того о чем пишет Gatman.
А вообще в принципе, Вы все правильно пишите и вполне понятно. Я только не хочу делать partial классы и отделять доступ к данным от бизнесс логики. Здесь аж несколько причин. Если интересно напишу. Но именно это и произойдет если буду использовать LINQ и WCF, так как я понимаю их сейчас.

bured
Спасибо!!! По заголовкам именно то, что я искал в MSDN
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35873763
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напишите, если не сложно.
Мне, было бы интересно услышать эти аргументы, потому что я не понимаю, что Вас останавливает от использования тонкой модели? Почему обязательно логика должна располагаться в тех же классах, что и данные?

С EF и WCF Microsoft продвигает подход, когда логика выносится в так называемые "бизнес-компоненты", а сами объекты данных остаются просто набором public свойств (ну может на них навешивают атрибуты валидации и все), а вся логика выносится в отдельные классы с методами, которыми в качестве параметров передаются объекты данных (собственно, бизнес-компоненты).

В результате вы имеете следующее:
- EF продуцирует готовые "тонкие" бизнес-объекты, которые можно сразу использовать как DTO (кстати, стандартный генератор сразу же снабжает все классы и свойства EF-объектов нужными атрибутами)
- методы бизнес-компонент могут сразу проецироваться на методы WCF сервисов.
- если вас смущает необходимость каждый раз передавать методам компонент в качестве параметров объекты данных, то эти методы можно реализовать как extended-методы, только надо проверить, можно ли их тогда будет использовать в WCF.

Вроде, довольно строгая схема получается... Может я просто не вижу каких-то скрытых подводных камней?
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35873989
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилРНапишите, если не сложно.
Мне, было бы интересно услышать эти аргументы, потому что я не понимаю, что Вас останавливает от использования тонкой модели? Почему обязательно логика должна располагаться в тех же классах, что и данные?

С EF и WCF Microsoft продвигает подход, когда логика выносится в так называемые "бизнес-компоненты", а сами объекты данных остаются просто набором public свойств (ну может на них навешивают атрибуты валидации и все), а вся логика выносится в отдельные классы с методами, которыми в качестве параметров передаются объекты данных (собственно, бизнес-компоненты).


Глупость получилась у нас когда решили следовать "подходу Микрософта".
Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс. Дальше надо вызвать бизнес-логику производного обьекта.
Как? Ведь они связаны только частью имени класса!
Например - есть PersonRecordEntity и PersonRecordBL - получили PersonRecordEntity как baseEntity - и? Как узнать что нужно вызвать именно PersonRecordBL а не ComponentBL ?
Выкрутились рефлекцией. А зачем?
Ведь никогда (у нас это так) бизнес логика PersonRecord не будет использоваться без самой PersonRecord....
Я возмущался с самого начала! Но "Microsoft продвигает подход" ....
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35874198
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МихаилР,

1. У меня мало бизнес логики. Ее на слой не хватает. :) Не охото делать слой ради слоя и тем самым усложнять систему.
2. Partial. Была мысль сделать енту логику раширяемой. Т.е. тут какое-то решение нужно.

Тут наверно замечу, что предполагал сделать базовую бизнес логику. А то по тексту получается 2 исключает 1.

3. Вот тут вообще пока запарка. Дело в том, что у меня несколько БД, включая Analysis Services. Есть мощьная система метаданных для SQL Server. Есть сервер на Remoting, занимающийся рассылкой сообщений(понятное дело до 3.5 и WCF писал).

Ну как бы нерешаемых вопросов нет конечно, но не понятно было как WCF и EF совместить.

bured! Именно то что надо было. Спасибо!
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35875030
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129
Глупость получилась у нас когда решили следовать "подходу Микрософта".
Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс. Дальше надо вызвать бизнес-логику производного обьекта.
Как? Ведь они связаны только частью имени класса!


Интересный момент, надо подумать...
Т.е. если коротко, то проблема возникла с вызовом виртуальных методов? Я правильно понял?

У нас таких проблем не возникало, т.к. мы стараемся не ветвить без необходимости иерархию, и везде работа в бизнес-слое идет непосредственно с тем типом, который нужен, а не с базовым.

Спасибо, что подбросили пищу для размышления!
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35876019
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилРD129...
Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс...


Интересный момент, надо подумать...

Зачем думать над тем, что не имеет практического смысла (ИМХО): если клиент получает производный объект для отображения (или еще для чего-то там?), то почему он вдруг должен возвращать базовый?
(не вижу объективных предпосылок для такого поведения).
По-моему это все от желания "оптимизировать" сверх меры то, что оптимизации не подлежит...
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35876123
alexdr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Slava1. У меня мало бизнес логики. Ее на слой не хватает. :) Не охото делать слой ради слоя и тем самым усложнять систему.
Slava, отдельный слой для бизнес-логики обычно выделяется вне зависимости от того, мало ее или нет. Бизнес-логика это такая штука, которая имеет обыкновение очень часто меняться вне зависимости от желаний разработчика (такова жизнь). Если приложение пишется не на два-три месяца, то "размазывание" бизнес-логике по клиенту, серверу приложений и БД (напр., через частичную ее реализацию в ХП) приведет к тому, что очень быстро система станет неподдерживаемой. Любое изменение в бизнес-правилах будет означать переписывание кода по всему приложению, что является задачей более чем не тривиальной... Вот на такие грабли можно наступить еще при проектировании приложения.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35876259
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129, 17.03.2009 13:46 [6937685]
>... Например - клиент возвращает обьект ...
До сих пор считаю, что WCF работает с сериализованными версиями объектов.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35876302
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-quМихаилРD129...
Например - клиент возвращает обьект. По факту - это производный обьект, но интерфейс возврата - как базовый класс...


Интересный момент, надо подумать...

Зачем думать над тем, что не имеет практического смысла (ИМХО): если клиент получает производный объект для отображения (или еще для чего-то там?), то почему он вдруг должен возвращать базовый?
(не вижу объективных предпосылок для такого поведения).
По-моему это все от желания "оптимизировать" сверх меры то, что оптимизации не подлежит...
Да, вызов виртуальных методов бизнес-логики. (Save, Delete, Update, Load)...
Вышло так :есть базовый класс - в нем есть базовые свойства для отображения - Id, Description, CreateDate. Производный класс - дополняет еще например LocationX , LocationY
А другие - что-то свое.
Клиент получает по методу Load - базовый класс, который "дернут" методом из соответственной бизнес логики по ключу (имени типа и Id обьекта).
Изменяет его и вызывает Save WCF сервиса - c передачей обьекта (производного) приведенного к базовому типу. Дальше сервис должен вызвать Save бизнес логики. А какой? Ее же взяли и отделили от обьекта. И получается изврат - поиск бизнес-логики опять по ключу.
Если делать не так - то все просто - но выходит, что надо делать сервисы (по 4 штуки) для каждого производного класса. А их уже 24.
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35876324
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевD129, 17.03.2009 13:46 [6937685]
>... Например - клиент возвращает обьект ...
До сих пор считаю, что WCF работает с сериализованными версиями объектов.

С уважением, Владимир.
Да это уже не наша проблема. Сериализованными, переписанными от руки...
по факту - метод WCF вызван, передан класс как параметр - оператор new выполнился где-то в недрах дотнета...
:)
...
Рейтинг: 0 / 0
Вопрос к тем кто WCF применяет
    #35876446
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 на самом генериковом уровне...
З.Ы. счаз нет времени на подробное обсуждение... потом договорим обязательно...
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вопрос к тем кто WCF применяет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]