Size: a a a

2020 August 16

RM

Roy Mustang in C++ Together 2.0
на 37 строке видишь дружественный метод HelenaFramework? Он определен в конце HFapp.hpp
источник

RM

Roy Mustang in C++ Together 2.0
Как думаешь зачем это сделано?
источник

RM

Roy Mustang in C++ Together 2.0
Я мог бы убрать этот дружественный метод, а Initialize и Finalize методы кинуть в public
источник

RM

Roy Mustang in C++ Together 2.0
Многие бы так и сделали, но встает вопрос
источник

RM

Roy Mustang in C++ Together 2.0
А нахера разработчику, который юзает твою бибу видеть постоянно эти методы, если они используются только в HFApp и никогда не должны быть доступны разработчику?
источник

CC

Cool Cooler in C++ Together 2.0
Roy Mustang
Я жру кактус совсем не из-за индексаций
Я тоже прочитал как "индексаций" (но там "индирекции", и я хз, что это)
источник

RM

Roy Mustang in C++ Together 2.0
Концепция архитектуры в моем случае - это разработчик юзающий бибу не должен видеть что за ширмой, он не должен видеть методы, которые используются за ширмой
источник

RM

Roy Mustang in C++ Together 2.0
Он должен видеть только то, что ему дается как инструментарий для создания и манипулирования созданными модулями и их плагинами
источник

RM

Roy Mustang in C++ Together 2.0
Возвращаемся теперь к кактусам, я бы мог внутри ModuleTestA создать публичный метод GetModuleTestB, который возвращает указатель на ModuleTestB который мы в AppInit получили, помнишь? На 15 строке я говорил
источник

RM

Roy Mustang in C++ Together 2.0
Но так нельзя делать, это опять же нарушает концепцию архитектуры, лишнего не должно быть
источник

RM

Roy Mustang in C++ Together 2.0
Щас объясню почему, это будет работать прекрасно, плагины модуля ModuleTestA смогут юзать его метод GetModuleTestB и успешно работать с указателем, но теперь к проблеме
источник

RM

Roy Mustang in C++ Together 2.0
У нас же есть другие классы модулей, которые так же могут получать указатели уже на наш класс ModuleTestA и что они увидят? ModuleTestB увидет метод GetModuleTestB и подумает, это че за дичь, зачем там метод, который указывает на меня же
источник

RM

Roy Mustang in C++ Together 2.0
Вот и кактус собственно
источник

RM

Roy Mustang in C++ Together 2.0
Если GetModuleTestB в ModuleTestA классе имеется, то он должен быть виден только для этого класса и его плагинов, но не для других модулей, которые получают так же указатель на нас
источник

G

GNU/Плюшка in C++ Together 2.0
мда
источник

RM

Roy Mustang in C++ Together 2.0
Есть решение, все плагины нашего модуля должны быть дружественными по отношению к своему модулю
источник

RM

Roy Mustang in C++ Together 2.0
А что не так? Считаешь это плохим подходом?
источник

RM

Roy Mustang in C++ Together 2.0
Это во-первых, защита от дурачка, он не сможет вызвать методы,которые должны вызываться только изнутри самого класса (this), во-вторых, это повышает читабельность, потому что доступно только то, что задумано для юзабилити из текущей ситуаций
источник

RM

Roy Mustang in C++ Together 2.0
Не спорю, постоянные friend'ы могут напугать, но зато разработчики не видят кишки других классов, которые никогда не должны вызываться из других мест
источник

RM

Roy Mustang in C++ Together 2.0
А теперь можем обсудить почему возмущения по поводу такого подхода
источник