powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вопрос по организации сервисов WCF
16 сообщений из 16, страница 1 из 1
Вопрос по организации сервисов WCF
    #35758667
Dim@sty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброе время суток.

Есть есть бизнес объект Person

Код: plaintext
1.
2.
3.
class Person : BussinesObject{
        string FIO{get;set;}
        int Age{get;set;}
}


Есть класс сервис PersonService, который реализует интерфейс IPersonService

Код: plaintext
1.
2.
3.
4.
5.
public interfeace IPersonService{
     void AddPerson(Person person);
     void UpdatePerson(Person person);
     void DeletePerson(Person person);
     PersonCollection GetPersonByDeportament(Deportament deportament);
}
Класс PersonService просто делегирует управление классу PersonManager
В среде WCF работа осуществляется c PersonService и IPersonService

Получается что на каждый бизнес объект отдельный сервис и меня это настораживает. Бизнес объектов то много.

Собственно вопрос.
Правильно ли использовать такой подход? или Wcf сервисы клепаются как то отдельно и объединяют в себе работу с разными бизнес объектами?

Наставьте на путь истинный.
C/У Dimasty
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35758814
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это на самом деле большая проблема. С ростом числа бизнес-классов получаем экспоненциальный рост числа методов/сервисов. Делу сильно помогли бы обобщения, но WCF не умеет (по-человечески, по крайней мере) использовать их в Service Contract'ах.

Мои предложения такие.

Во-первых, вынести-таки общий функционал (GetBusinessObject -- вот он будет самый некрасивый в использовании из-за постоянных приведений типов, SaveBusinessObject, DeleteBusinessObject) в какой-то отдельный сервис (IBusinessObjectService).

Во-вторых, как-то подумать насчет обобщенного механизма запросов. В качестве совсем уж бредовой идеи -- можно попробовать научиться самостоятельно анализировать Expression Tree и получить таким образом практически Linq2BusinessObjectService. Менее бредовая -- собственный язык запросов (типа HQL в Hibernate или какой-нибудь OGNL). Очевидный минус -- отсутствие Compile-Time проверок синтаксиса, хотя Fluent Interface и лямбды C# 3.0 могут кое-чем помочь делу. Еще менее бредовая и овеянная современными баззвордами идея -- слепить REST-интерфейс а-ля

Код: plaintext
GET service/person/list/where/department/1

и, вообще говоря, наслаждаться жизнью (не без минусов, разумеется).
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35758831
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже сначала думал сервисы клепать, потом забил на это дела из-за исключительной неудобности (особенно когда референсы валятся в студии по какой-то причине и не хотят работать, и приходится их заново создавать), сейчас имею в проекте 4 сервиса, один из них называется общий - содержит общие методы. и 3 более узкоспециализированные сервиса, опять же вынесены исключительно для удобства, можно было и в одном всё делать.
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35758880
Dim@sty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч
Во-первых, вынести-таки общий функционал (GetBusinessObject -- вот он будет самый некрасивый в использовании из-за постоянных приведений типов, SaveBusinessObject, DeleteBusinessObject) в какой-то отдельный сервис (IBusinessObjectService).


Не уверен что IBusinessObjectService поможет сократить количество сервисов, хотя в случае со справочниками это вариант. Ну это только десятая чать, вот что обидно.

Нахлобуч
Во-вторых, как-то подумать насчет обобщенного механизма запросов. В качестве совсем уж бредовой идеи -- можно попробовать научиться самостоятельно анализировать Expression Tree и получить таким образом практически Linq2BusinessObjectService. Менее бредовая -- собственный язык запросов (типа HQL в Hibernate или какой-нибудь OGNL). Очевидный минус -- отсутствие Compile-Time проверок синтаксиса, хотя Fluent Interface и лямбды C# 3.0 могут кое-чем помочь делу. Еще менее бредовая и овеянная современными баззвордами идея -- слепить REST-интерфейс

Было бы неплохо наклепать такой функционал. Буду пробовать.
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35758934
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем нужны эти интерфейсы на каждый класс?В книжке у Фаулера написано?
автор
Во-первых, вынести-таки общий функционал (GetBusinessObject -- вот он будет самый некрасивый в использовании из-за постоянных приведений типов, SaveBusinessObject, DeleteBusinessObject) в какой-то отдельный сервис (IBusinessObjectService).

А почему нельзя использовать дженерики а'la T Fetch<T,C> (C criteria)?
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35758978
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaА почему нельзя использовать дженерики а'la T Fetch<T,C> (C criteria)?
WCF так не умеет.
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759091
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал бегло и несразу понял.Такой лисапед уже давно готов - CSLA с одним DataPortal для всех объектов.
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759106
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЧитал бегло и несразу понял.Такой лисапед уже давно готов - CSLA с одним DataPortal для всех объектов.Интересу ради -- как он работает с зоопарком а-ля "PersonCollection GetPersonByDeportament(Deportament deportament)"?
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759134
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim@sty,

А, вот еще чего придумалось -- но это уже совсем на крайний случай. Вариация на тему "собственный язык запросов"; исполняется в C# 4.0:

Код: plaintext
1.
2.
3.
4.
dynamic service = ...;
Person p = service.GetPersonByID(1);
Department d = service.GetDepartmentByID(p.DepartmentID);
PersonCollection pc = service.GetPersonsByDepartmentID(d.ID);

Разумеется, ни одного такого метода в сервисе не будет. Будет только обработчик динамических вызовов, который будет парсить имя метода (Get - <что> - By - <Критерии> - OrderBy - <сортировка>) и собирать соответствующий запрос. Ежели заинтересовало -- смотри на Active Record Finders в Ruby on Rails и читай про Convention over Configuration.

Кстати, насчет REST рекомендую почитать "RESTful Web Services".
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759147
Dim@sty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaЧитал бегло и несразу понял.Такой лисапед уже давно готов - CSLA с одним DataPortal для всех объектов.

Бегло почитал я про этот CSLA, первое что бросилось в глаза это каша из BO и DAL. Маштабировать такие классы в дальнейшем практически невозможно.
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759182
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Dim@sty
>... есть бизнес объект ...
Такая конструкция не подойдет?
. . .
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
namespace ns_Сессии {
  [ServiceContract]
  public interface IСессии_service {
    [OperationContract]
    byte[] сксЗапросОтвет(byte[]abb);
  }
  [ServiceContract]
  public interface IСессии_host {
    [OperationContract]
    byte[] скс_TimeOut();
  }
  [ServiceContract]
  public interface IСессииСервис:IСессии_service,IСессии_host {} 
  
  //-- Сервис управления сессиями клиентов
  [ServiceBehavior(
    InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode = ConcurrencyMode.Multiple)
  ]
  public class Сессии_service: IСессииСервис { //-- MarshalByRefObject,
    const int МахЧислоКлиентов = 4096;
    const int МахЧислоСессий   = 65536;

    static AutoResetEvent[] evtSvrПрил = new AutoResetEvent[32];
    static AutoResetEvent evtSvrСессий = new AutoResetEvent(false);
. . .

С уважением, Владимир.
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759206
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБегло почитал я про этот CSLA, первое что бросилось в глаза это каша из BO и DAL. Маштабировать такие классы в дальнейшем практически невозможно.
И что-же понимается под маштабированием?Клепение интерфейсов ради их самих, с зоопарком из WCF это более правильный подход?
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759238
Dim@sty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaИ что-же понимается под маштабированием?

Возможность быстро наращивать свое приложение, затрачивая минимум времени..

автор
Клепение интерфейсов ради их самих, с зоопарком из WCF это более правильный подход?


WCF был выбран не потому что мне нравиться клепать интерфейсы.

У вас есть альтернативные варианты?
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759271
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИнтересу ради -- как он работает с зоопарком а-ля "PersonCollection GetPersonByDeportament(Deportament deportament)"?
Поразному.
Код: plaintext
1.
2.
3.
4.
Person p = DataPortal<Person>.Fetch(new SingleCriteria(1)); //или Person.GetPerson(1);
Department d = DataPortal<Department>.Fetch(new Criteria(p.DepartmentID)); //или Department.GetDepartment(p.Id)
Persons pc = Department.Persons; //Если Persons - дочерняя коллекция в Department, то она загружается через DTO вместе с Department, но возможен и вариант с ленивой загрузкой.
Persons pcc = Persons.GetListByDepartmentId(Department.Id);//DataPortal<Persons>.Fetch(new Criteria(Department.Id))
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35759341
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Возможность быстро наращивать свое приложение, затрачивая минимум времени..
У вас есть альтернативные варианты?
Именно такой вариант я и предложил- CSLA.Реализуем только классы с CRUD операциями и не занимаемся велосипедостроением, а только в настройках указываем,что нам нужно(локальный доступ,remouting,WCF, Web Service, DCOM или собственная фабрика,причем, во всех случаях будет только один сервис).Для SilverLight изменения будут минимальны.Помимо этого, во всех классах реализованно все необходимое для работы с binding ,бизнес правилами и разграничением доступа(WinForms,WPF,ASP,SilverLight).
PS Маштабируемость и минимум времени - разные понятия
...
Рейтинг: 0 / 0
Вопрос по организации сервисов WCF
    #35763814
Фотография webus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч,
Стояла подобная задача. Вышел из нее не очень красиво но все же. Т.к. WCF не умеет работать с Generics то имеем следующее....

Код: plaintext
1.
2.
Criteria crit = new Criteria();
//тут задаем параметры отбора
List<Customer> customers = SelectObject(new Customer(),crit) as List<Customer>;

Вместо generics передаем пустые объекты. На том конце наш WCF сервис смотрит что то вида такого:

Код: plaintext
1.
2.
3.
4.
5.
public object SelectObject(object obj,Criteria cr) {
  if(obj is Customer) {
    //обрабатываем но делаем возврат вида object
    return (object)ret_type;
  }
}
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вопрос по организации сервисов WCF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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