3 / 3 / 1
Регистрация: 28.11.2015
Сообщений: 108
|
|
1 | |
Как и какие идиомы и паттерны можно (и лучше) применять?19.04.2018, 13:13. Показов 1793. Ответов 14
Метки нет (Все метки)
Здравствуйте. Писал я проги для себя ну и так по мелочи, для абы кого, да и проги абы как, не задумываясь о том как какие идиомы (паттерны) можно применять, так получилось что узнал я значит про все и теперь сижу и ломаю голову как все это лучше сделать.
Вот к примеру решил я написать класс Service(создание объектов и предоставление доступа к методам get send) хотел сделать Паттерн Factory Method , для управления сетевыми соединениями (Tcp, serial, ну и тд.) после установки соединения от них нужны методы get и send, с этим понятно, а вот контроль создания Tcp можно отдать Service но так получилось что Tcp у меня singleton и он уже контролирует сам себя. Добавлено через 21 час 4 минуты решил я сильно голову не греть и потихоньку приводить проект в нормальный вид, а там уж что получится ))
0
|
19.04.2018, 13:13 | |
Ответы с готовыми решениями:
14
Какие методы есть в C++ для работы с файлами и в каких случаях какой лучше применять Какие паттерны используются в программе и для чего? Какие паттерны можно применить в данной задачи Игра точки. Какие паттерны можно применить? |
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
19.04.2018, 13:59 | 3 |
Вы уверены что это хорошая идея? Обычно программа может открыть несколько соединений с разными адресами, единственное соединение это все же скорее исключение.
Контроль создания (наверное, подключения?) возможно стоит отдать самому объекту соединения и уже в его "статусе" смотреть подключилось или нет. Впрочем, саму задачу вы не раскрыли, так что все это только общие соображения, которые в вашем случае могут оказаться совсем неверными.
0
|
3 / 3 / 1
Регистрация: 28.11.2015
Сообщений: 108
|
|
19.04.2018, 14:30 [ТС] | 4 |
COKPOWEHEU, вот Tcp может работать с несколькими соединениями, при новом соединении на стороне сервера Мы получаем новый соккет, а все остальное остается неизменным. Но объект TCP один поэтому и singleton, а вот Serial можно много открывать, Думаю можно создать один SuperSerial для много serial и а при создании объекта получать дескриптор (ключ) по которому отправлять данные в нужный serial. Хотя я пытался что то похожее сделать но запутался и откатился назад.
RAII идиому хочу по отношению к serial применить. ? Разве правильно что объект будет сам себя контролировать. Если при инициализации будет ошибка вызову деструктор. Зачем объект нерабочий нужен. Добавлено через 3 минуты в общем раньше я не парился ))) а сейчас все же охота порядок навести, да и читаемость кода улучшится RAII мне за это и нравится постараюсь полностью избавится от лишних seting ов
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
19.04.2018, 16:09 | 5 |
Я бы скорее делал на каждое соединение отдельный объект, но это уже вкусовщина.
Что такое Serial? COM-порт, UDP-соединение? А с другой стороны меньше связей с другими объектами, меньше разделения ответственности. В целом это опять вкусовщина. Любую задачу можно решить несколькими способами. А еще несколькими правильными способами. Все эти паттерны и идеологии нужны для того чтобы было проще использовать код повторно или выдрать отдельный объект (не обязательно в терминах ООП, это может быть пара cpp-h файлов) и отладить его максимально изолировано. Или просто навести порядок с уровнями абстракции, чтобы низкий уровень железа и битов не смешивался с высоким уровнем конкретных задач и объектов.
1
|
3 / 3 / 1
Регистрация: 28.11.2015
Сообщений: 108
|
|
19.04.2018, 16:17 [ТС] | 6 |
Serial это com , про паттерны я и не задумывался "было проще использовать код повторно или выдрать "
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
23.04.2018, 10:29 | 7 |
А в чем разница? Что COM-портов может быть несколько, что TCP-соединений. А в некоторых случаях и по нескольку слушателей на "том конце" интерфейса.
Ну вы же хотите их использовать не только "чтобы было", а чтобы упростить разработку.
0
|
3 / 3 / 1
Регистрация: 28.11.2015
Сообщений: 108
|
||||||
23.04.2018, 11:38 [ТС] | 8 | |||||
http://rsdn.org/article/unix/sockets.xml
Функция accept создаёт для общения с клиентом новый сокет и возвращает его дескриптор. Параметр sockfd задаёт слушающий сокет. После вызова он остаётся в слушающем состоянии и может принимать другие соединения.. Поэтому и singleton, да и нет необходимости, Вопрос есть про отладку
отладка нужна ведь только мне и когда все будет отлажено нужно ее убрать из кода.
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
23.04.2018, 13:29 | 9 |
TCP предназначен для связи двух собеседников. Вы открываете сокет, ждете пока постучится клиент и создаете с ним связь. Если постучится второй клиент, для него можно открыть другой сокет и так далее. И даже разнести эти сокеты по разным потокам. Именно по TCP, правда, только теорию читал, а вот с UDP хочу повозиться на практике, и там предполагается либо один общий сокет для всех клиентов и фильтрация по IP, либо на каждого свой. Пока не знаю как лучше, там видно будет.
assert()'а не хватит? "когда все будет отлажено"! Какой оптимизм. Лучше настроить уровни предупреждений, чтобы собранная с максимальным уровнем писала в логи вообще все и как можно подробнее, а с минимальным (когда ее уже можно отдавать пользователям) - только о самых важных ошибках, которые они могут сами исправить. Никто ведь не застрахован от неправильного ввода или опечаток в коде. Собственно, я бы предложил логи вообще не отключать.
0
|
3 / 3 / 1
Регистрация: 28.11.2015
Сообщений: 108
|
|
23.04.2018, 14:37 [ТС] | 10 |
ну это у меня не совсем даже и ошибка просто исключительная ситуация, можно конечно сообщения для пользователя написать "! Alarm TcpSocket is null", пытаюсь минимальный функционал сделать, наверное так и оставлю потом просто signal message("blabla") сделаю вместо qDebug();
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
||||||
23.04.2018, 15:29 | 11 | |||||
Как вариант - обмазать все макросами:
Добавлено через 34 минуты Да, кстати. Вы можете поменять название на более осмысленное? Ну хотя бы "подгонка архитектуры под идеологию RAII"
0
|
3 / 3 / 1
Регистрация: 28.11.2015
Сообщений: 108
|
|||||||||||
27.04.2018, 04:31 [ТС] | 12 | ||||||||||
Добавлено через 1 минуту
решил не обмазывать ))) сделал вот так
0
|
3 / 3 / 1
Регистрация: 28.11.2015
Сообщений: 108
|
|
28.04.2018, 22:43 [ТС] | 13 |
Есть вопрос, в общем есть 2 класса (A, B)с похожим функционалом унаследованные от 1 Абстрактного родителя, классы собирают инфу с сетевых портов (COM, и TCP), что я сделал создал класс SuperService создаю там объекты классов (A, B) соединяю сигналы этих классов с методами SuperService, правильный подход или можно было как то лучше решить, в конечном итоге задача сводится к аккумулированию информации из разных объектов в одном месте.
Добавлено через 8 минут и 2 вопрос, принципы ООП заставляют меня создавать больше классов чем обычно (раньше все было в куче), обзор проекта в IDE уже глаз начинает резать, как то можно от этого избавится ? Добавлено через 37 минут пробовал includepath, я так понял но просит чтобы реализация методов была в header файле который подключаю ((
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
29.04.2018, 06:12 | 14 |
классы нужно создавать исходя из принятой объектной модели. их не может быть больше, чем нужно и тем более больше, чем обычно
0
|
3 / 3 / 1
Регистрация: 28.11.2015
Сообщений: 108
|
|
05.05.2018, 10:29 [ТС] | 15 |
только мне знать сколько их нужно и сколько обычно я создаю в скобках я пояснил почему так
Вообще может спрятать часть классов в статическую библиотеку ) пока других идей нет. Список классов большой а работаю с 3-4 взаимосвязанными классам, жаль в Qt Creator нет фильтра по избранному.
0
|
05.05.2018, 10:29 | |
05.05.2018, 10:29 | |
Помогаю со студенческими работами здесь
15
Какие паттерны можно использовать для совершенствования приложения Я очень хочу выучить JS. Где и как лучше изучать, с чего начинали вы, какие сайты для изучения лучше использовать? Как применять данные из куков на странице до загрузки страницы или как можно раньше? Какие паттерны вы используете чаще всего? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |