Ну если Вы решили навести порядок - то я бы Вам рекомендовал по возможности избавится от методов которые используют внешние переменные - есть аргументы - есть возвращаемое значение - ими и оперируйте.
Я так и сделал уже. С таблицами иначе и не выходит. А вот работать со списками и декларировать их в классе крайне неудобно. Спасибо за совет, который укрепил веру в правильный выбор. Очень ценю.
Тем более, что в данном случае это всего лишь ObjectId таблицы.
И еще в шапке темы вопрос касался списков, точнее пример был со списками.
Конкретно, в коде, что я пишу, есть метод который считывает инфу с блоков, он создает около 10 списков, затем я их использую в методе создание спецификации, а потом с самой спецификацией и списками с метода, который считывает инфу с блоков, работаю в методе создание ведомости расхода стали. В общем, много возвращаемых значений), но, в принципе, ничего страшного, пережить это можно. Я лишь хотел убедиться, что то, к чему пришел, правильно, дабы не делать "плохого", или как там в простонародье называют
, кода. А, так как пришел я к двум вариантам, то и хотел спросить, как лучше. Да и, вообще, много всего я понял за последние пару дней. Спасибо за терпение и извините за некоторые нелепости.
Изобретение велосипедов дело интересное но малоэффективное.
Эти вопросы возникают у каждого программиста, и они уже были систематизированы, обдуманы, выработаны методы решения.
Решение твоих проблем в книгах "Чистый код" или "Совершенный код".
Спасибо. Обязательно просмотрю. Просто, как правило, форум эффективней с позиции трудозатрат. Здесь получаешь конкретные ответы от опытных товарищей, делаешь выбор и дальше с этим работаешь.
1. CreateTable1(pr.Value);
CreateTable2(pr.Value);
быстро просматривая твой код, возможно стоит избежать дублирования и вынести один единственный метод CreateTable,
который всегда принимает Point3d и доп параметры, тут стоит определиться что он будет принимать.
Например CreateTable(Point3d insertPoint, string str1, string str2),
Возможно CreateTable(Point3d insertPoint, string[] str),
Или так CreateTable(Point3d insertPoint, ObjectId tableId),
Забавно, но у меня в коде так и сделано.
Сразу идет метод:
GetInformationFromBlocks(out List<string> list0, out List<string> list1...)
который мне выдает около 10 списков.
Далее я их использую в создании первой таблицы, также есть аргумент точки вставки и возвращаемое значение Id таблицы:
CreateSpecification(Point3d pt, List<string> list0, List<string> list1..., out ObjectId tableId)
Далее создается вторая таблица:
CreatingStateOfSteel(Point3d pt, ObjectId tableId)
Я не могу их объединить в один метод, потому как механизмы создания ну очень разные.
Ну и далее идет метод вставки таблиц:
в котором совсем все просто и понятно.
В общем, есть еще методы типа создание табличного стиля, настройка стиля.
Это то, что я получил после модернизации своего одного метода. Ушло много времени на разобраться, но как же сейчас все круто!!
Я счастлив просто!
Теперь я без проблем могу дописать вставку еще какой таблицы, вставить только одну, изменить табличный стиль или его настройки. Все теперь по-человечески.
Несколько дней проклинал идею улучшить код, зато теперь доволен как слон.
2. Перепиши InsertTables к примеру так:
var insertPoint = GetPoint();
if (insertPoint!=null)
{
ObjectId tableId = CreateTable(insertPoint, ObjectId.Null);
CreateTable(insertPoint, tableId );
}
Т.е. запрос точки вынеси в отдельный метод GetPoint() так удобнее читать сам метод InsertTables.
проверка точки так не выйдет, это всего лишь схема изменения, додумай сам до конца.
Идею понял! Забавно! Обязательно поэкспериментирую!
3. InsertTables вынеси первым методом в классе,
потом GetPoint(), затем CreateTable().
т.е. стартовую функцию класса ставь вначале, затем расположи в порядке обращения к методам чисто читать удобнее.
Понял. А реально, ведь удобней! Спасибо! Очевидные вещи, конечно. Но, пока сам дойдешь.. Спасибо за ценные советы!
Если переменные хранятся в одном месте и тебе заранее неизвестны, например параметры таблицы, например ты не знаешь будет ли цвет когда либо или нет.
то можешь создать класс TablePropertyes туда сразу добавить точку вставки и передавать его в метод построения CreateTable(TablePropertyes) так ты получишь параметры, которые сможешь дополнять независимо от основной логики программы, и дополнять CreateTable в зависимости от доступных параметров.
Как же все вариативно и интересно!! Здорово.
Александр Ривилис,
Дима_,
Привалов Дмитрий, Вы, конечно, извините за такие вопросы по созданию велосипедов. Я не так давно занимаюсь этим всем. И просто с открытым ртом все это читаю. В какой-то момент, когда уже написано много плагинчиков, когда число строк становится очень большим (у меня так получается, что практика несколько опережает теорию, конечно, таким образом много спотыкаешься, но зато результаты первые есть быстрее, чем в противном случае), я начал понимать, что программирую на языке орков. И для того, чтобы дальше с этим работать мне нужна структура и система. Собственно, лично мне всегда проще спросить на форуме, чем читать книжки. Так выходит эффективней. Тем более, здесь плохого не посоветуют. Единственное, это не должно оцениваться как неуважение к форумчанам и нежелание читать книги. Темы стараюсь создавать только после самостоятельного изучения (продолжительного по времени). Собственно в шапке я и написал о том, что делаю так и этак. Спросил, как лучше? А не то, чтобы просто спросил, как делать. То есть стараюсь разобраться сам. Просто порой нужно авторитетное мнение в связи с неопытностью и желанием делать быстро и правильно. Спасибо большое Вам за ответы и советы!
PS. Решением темы отмечаю пост, который дал ответ на мой вопрос и в соответствии с советом которого планирую дальше работать.