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

Есть есть бизнес объект 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
15.01.2009, 11:31
    #35758814
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по организации сервисов WCF
Вот это на самом деле большая проблема. С ростом числа бизнес-классов получаем экспоненциальный рост числа методов/сервисов. Делу сильно помогли бы обобщения, но 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
15.01.2009, 11:40
    #35758831
Gatman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по организации сервисов WCF
тоже сначала думал сервисы клепать, потом забил на это дела из-за исключительной неудобности (особенно когда референсы валятся в студии по какой-то причине и не хотят работать, и приходится их заново создавать), сейчас имею в проекте 4 сервиса, один из них называется общий - содержит общие методы. и 3 более узкоспециализированные сервиса, опять же вынесены исключительно для удобства, можно было и в одном всё делать.
...
Рейтинг: 0 / 0
15.01.2009, 12:02
    #35758880
Dim@sty
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по организации сервисов WCF
Нахлобуч
Во-первых, вынести-таки общий функционал (GetBusinessObject -- вот он будет самый некрасивый в использовании из-за постоянных приведений типов, SaveBusinessObject, DeleteBusinessObject) в какой-то отдельный сервис (IBusinessObjectService).


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

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

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

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

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

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

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


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

У вас есть альтернативные варианты?
...
Рейтинг: 0 / 0
15.01.2009, 14:29
    #35759271
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по организации сервисов WCF
авторИнтересу ради -- как он работает с зоопарком а-ля "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
15.01.2009, 14:57
    #35759341
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по организации сервисов WCF
автор
Возможность быстро наращивать свое приложение, затрачивая минимум времени..
У вас есть альтернативные варианты?
Именно такой вариант я и предложил- CSLA.Реализуем только классы с CRUD операциями и не занимаемся велосипедостроением, а только в настройках указываем,что нам нужно(локальный доступ,remouting,WCF, Web Service, DCOM или собственная фабрика,причем, во всех случаях будет только один сервис).Для SilverLight изменения будут минимальны.Помимо этого, во всех классах реализованно все необходимое для работы с binding ,бизнес правилами и разграничением доступа(WinForms,WPF,ASP,SilverLight).
PS Маштабируемость и минимум времени - разные понятия
...
Рейтинг: 0 / 0
19.01.2009, 06:38
    #35763814
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по организации сервисов WCF
Нахлобуч,
Стояла подобная задача. Вышел из нее не очень красиво но все же. Т.к. 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
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вопрос по организации сервисов WCF / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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