Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > подскажите по дизайну классов.


Автор: boostcoder 13.2.2012, 21:56
всем доброго вечера! smile 

есть следующие сущности:
1. context - основной класс, без которого никакие из ниже перечисленных не могут существовать. для приложения возможен лишь один экземпляр этого класса.
2. socket - собственно сокет. создается исключительно при помощи context`а.
3. session - объект, описывающий состояние сокета. создается исключительно при помощи сокета, который и описывает. может использовать исключительно с сокетом который создал его.
4. message - тип сообщения. используется для отправки/приема данных. создается исключительно при помощи сокета. может использовать исключительно с сокетом который создал его.

в псевдокоде, как-то так:
Код

int main() {
   context ctx;
   
   socket sock = ctx->socket(...); // 1
   
   sock->connect(...); // 2

   sock->set_options(...); // 3
   
   message msg = sock->message(...); // 4
   
   msg->init(...); // 5
   
   sock->send(msg); // 6
   msg->send(); // 7
   sock->message("string")->send(); // 8
}

http://liveworkspace.org/code/bf563fa206d0362f14956c7a7beb1df5

под номером 1 и 2 вопрос: при создании объекта сокета, позволить ли создание сокета без указания адреса сразу?
под номером 3: опции сокету задавать позже? или сразу при создании?
под номером 4 и 5: сообщение инициализировать данными сразу? или позже?
под номером 6, 7 и 8: три способа отправки сообщения.

все объекты - смарт указатели. используется пул памяти/объектов. так что затраты на создание/пересоздание практически нулевые.


скорее интересует мнение форумчан, и мысли.

благодарен.

Автор: Sahab 13.2.2012, 23:24
Цитата(boostcoder @  13.2.2012,  21:56 Найти цитируемый пост)
под номером 1 и 2 вопрос: при создании объекта сокета, позволить ли создание сокета без указания адреса сразу?

да. А так же с возможностью указания дескриптора сокета.
Цитата(boostcoder @  13.2.2012,  21:56 Найти цитируемый пост)
под номером 3: опции сокету задавать позже? или сразу при создании?

думаю позже.
Цитата(boostcoder @  13.2.2012,  21:56 Найти цитируемый пост)
под номером 4 и 5: сообщение инициализировать данными сразу? или позже?

а какой резон это делать позже?

Автор: boostcoder 13.2.2012, 23:27
Цитата(Sahab @  13.2.2012,  23:24 Найти цитируемый пост)
а какой резон это делать позже?

к примеру:
Код

while ( condition ) {
   msg->init( some data );
   msg->send();
   // msg->init( some data )->send();
}


Автор: feodorv 14.2.2012, 00:08
Цитата(boostcoder @  13.2.2012,  21:56 Найти цитируемый пост)
позволить ли создание сокета без указания адреса сразу

В принципе, адрес нужен для connect'а. А сам сокет можно создавать и без привязки к адресу. Правда, придётся сразу указать некоторые свойства сокета: TCP/UDP/IP::num/UNIX/SelfMade/...
Цитата(boostcoder @  13.2.2012,  21:56 Найти цитируемый пост)
опции сокету задавать позже? или сразу при создании?

Многие опции TCP/IP-сокету разрешается задавать исключительно до connect'а, поэтому "сразу при создании" имеет смысл. С другой стороны, опции могут быть уж слишком разнородны, непонятен синтаксис задания таких опций при создании сокета.
Цитата(boostcoder @  13.2.2012,  21:56 Найти цитируемый пост)
сообщение инициализировать данными сразу? или позже?

А нельзя предусмотреть и тот и другой вариант?)))

Автор: boostcoder 14.2.2012, 00:32
Цитата(feodorv @  14.2.2012,  00:08 Найти цитируемый пост)
Правда, придётся сразу указать некоторые свойства сокета: TCP/UDP/IP::num/UNIX/SelfMade/...

угу.

Цитата(feodorv @  14.2.2012,  00:08 Найти цитируемый пост)
опции могут быть уж слишком разнородны, непонятен синтаксис задания таких опций при создании сокета.

тоже верно.

Цитата(feodorv @  14.2.2012,  00:08 Найти цитируемый пост)
А нельзя предусмотреть и тот и другой вариант?)

можно)
просто интересуют предпочтения)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)