Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Декларативное определение библиотеки на основе структуры проекта #203

Open
yukon39 opened this issue Apr 22, 2022 · 4 comments

Comments

@yukon39
Copy link

yukon39 commented Apr 22, 2022

Взято по аналогии со стандартами разработки Go (https://github.com/golang-standards/project-layout)

Реализовать декларативное описание библиотеки на основании структуры проекта. Например:

  • /cmd - определяет "ИсполняемыйФайл".
  • /pkg (/public) - Классы и модули расположенные определяют публичные объекты аналогично "ОпределяетКласс"/"ОпределяетМодуль"
  • /bin - регистрирует расположенные внутри аддины.
  • /internal (/private) - включает в состав пакета, но не публикует классы/модули
  • /vendor - включает в состав поставляемые библиотеки (текущий аналог oscript-modules)
  • /docs, /examples, /etc ... - дополнительные файлы библиотеки (документация, примеры, другое)
  • /tests - содержит тесты проекта. Тесты запускаются в едином с /public+/private контексте.

Для задания псевдонимов реализовать множественную аннотацию @Синоним/@Alias. Например:
/cmd/main.os - имя по умолчанию - создается cmd по имени библиотеки. Для

@Alias vrunner
@Alias runner

Или реализовать alias.json в папке с файлом:

{
   "main.os": [ "vrunner", "runner" ]
}

Аналогично, для публичных классов/модулей.

Это позволит:

  1. Упростить описание проекта, полностью убрав, или разместив декларации объектов максимально приближенно к их определению
  2. Сделает проекты более структурированными, что повысит их читаемость и сопровождаемость
@nixel2007
Copy link
Member

Упростить описание проекта, полностью убрав, или разместив декларации объектов максимально приближенно к их определению

надо отметить, что указание ОпределяетКласс и ОпределяетМодуль - полностью опциональное. Если модули и классы лежат по соглашению о структуре каталогов, то загрузчик библиотек из сам загрузит в правильном виде.

@EvilBeaver
Copy link
Member

Да, у нас и так в целом на основе структуры проекта загрузка ведется. Развивать понятно что можно и дальше. Надо проектировать каждый конкретный кейс: Цель, ЧтобыЧто. @yukon39 возьметесь?

@yukon39
Copy link
Author

yukon39 commented Apr 25, 2022

@EvilBeaver К предложенной структуре проекта есть предложения/замечания? Я в рамках ее попробую что-нибудь реализовать.

@EvilBeaver
Copy link
Member

Замечание одно - это слишком высокоуровневый набросок из которого непонятно есть к нему замечания или нет.
Хотелось бы понять что делает каждая папка, как ее обрабатывает opm, что с ней делает автор проекта и т.п. Как это стыкуется с packegdef... Короче сейчас слишком мало информации для понимания предложения

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants