223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|||||||||||
1 | |||||||||||
Архитектура программы: как лучше реализовать контейнер и методы управления его содержимым?02.05.2018, 22:19. Показов 1170. Ответов 6
Метки нет (Все метки)
Доброго времени суток.
Имею такой код:
foo дергает foo_1 и foo_2 . Аналогично для bar() . Функций конечно же больше, нежели в упрощенном примере, и это немного напрягает. Думаю раскидать по интерфейсам, типо такого:
0
|
02.05.2018, 22:19 | |
Ответы с готовыми решениями:
6
Архитектура программы: как лучше реализовать иерархию классов? (игра "Тамагочи") Архитектура. Как лучше реализовать то, что я уже реализовал. Код и проект в теме Как лучше реализовать сохранение с 10-20 элементов управления Как отсортирвоать контейнер, если его тип определяется по ходу выполнения программы? (динамическая идентификация типов) |
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
|
02.05.2018, 22:51 | 2 |
Думаю что бы ответить на данный вопрос надо быть знакомым с предметной областью ваших классов.
На обычных foo, bar сложно что либо сказать. Сильно зависит от того что конкретно делают эти методы и чем занимается ваш класс/классы
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|||||||||||
02.05.2018, 23:08 [ТС] | 3 | ||||||||||
Грубо говоря -
class A - это хранилище (список) блоков (отдельная структура). Методы foo - отвечают за вставку блока в нужное положение и возвращают количество других объектов, которых уже можно "слепить" из имеющихся блоков.Методы bar отвечают за создание этих объектов и удаление использованных данных из блоков.Мне не очень нравится наличие и тех, и тех методов в приват области. В публичной то все понятно, не так их и много, в отличие от приватной. Вот и хочу разнести на отдельные компоненты. Добавлено через 4 минуты И да, мой класс - dll проект. т.е. вызов осуществляется так:
0
|
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
|
02.05.2018, 23:13 | 4 |
mat_for_c,
Судя по описанию у вас есть некий контейнер и методы для управления и получения некоторой информации о содержимом данного контейнера. Выносить функциональность в другие классы обычно имеет смысл в тех случаях, когда та самая "вынесенная часть" может быть использована иным классом. Таким образом можно избежать дублирования кода. Если же эти методы имеют отношение только к данному контейнеру, то выносить их за его пределы не нужно... Попробуйте реорганизовать внутреннюю структуру пересмотрев реализацию методов. Например, можно попробовать обьединить код нескольких методов в один, но при условии, что в итоге этот метод будет решать одну задачу.
1
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
||||||
02.05.2018, 23:27 [ТС] | 5 | |||||
Да, совершенно верно.
Но чем больше кода в ф-ии, его сложнее читать, разве нет? Поэтому я и разбил на мелкие ф-ии, аля foo_1 и т.д., и сделал их приватными, ведь они же не должны быть доступны пользователю (черный ящик как-никак). Но теперь этих мелких функций полно и явно они не называются foo_[индекс] , т.е. глядя на описание класса не совсем понятно, что к чему относитсяДобавлено через 2 минуты Т.е. как вариант, сделать группировку:
0
|
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
|
02.05.2018, 23:46 | 6 |
mat_for_c,
Да, внутренние детали желательно скрывать. Насчёт имен методов это конечно же плохо. Лучше все таки использовать говорящие имена. Если нет говорящих имен, то скорее всего вы не правильно подошли к реализации. Думаю лучше сначала определить требования, а потом уже писать методы, которые будут отвечать установленным требованиям (тогда и проблем с именованием будет поменьше) А то у получается вы в методе написали произвольный код которому сложно дать имя (то есть сделали наоборот) Добавлено через 1 минуту mat_for_c, Насчёт "много кода в одной функции" - это зависит от конкретной функций... Функции/классы желательно определять по требованиям а не по количеству кода. И что бы функция выполняла только одно требование. Добавлено через 1 минуту А это требование может быть выполнено в и 50 строк кода. Можно конечно создавать вспомогательные методы но в пределах разумного и то если что то из основного метода можно выделить в подзадачу, это тоже нормальное решение.
1
|
sourcerer
|
||||||
03.05.2018, 07:11
Архитектура программы: как лучше реализовать контейнер и методы управления его содержимым?
#7
|
||||||
0
|
03.05.2018, 07:11 | |
03.05.2018, 07:11 | |
Помогаю со студенческими работами здесь
7
Файл: Реализовать методы управления данными про успеваемость студентов... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |