Заявление об ограничении ответственности: я новичок в Node.js.
Существует ряд языков на основе классов, в которых вы можете / должны использовать пространства имен для организации своего кода, например: Java, PHP, ActionScript 3… Для ряда из этих языков, если вы выберете / имеете для использования пространств имен обычно существует набор общих практик и соглашений, которые регулируют организацию проекта:
- Классы образуют базовые блоки кода, а обязанности распределяются между несколькими классами.
- Иерархия файлов классов находится в единственном каталоге верхнего уровня (чаще всего:
src/
илиlib/
). - Каждый исходный файл содержит определение одного класса и ничего больше.
- Each class resides at a specific level of a namespace (or package) hierarchy, which mirrors the filesystem; for example:
- in Java: class
com.badlogic.gdx.Application
would be found in thesrc/com/badlogic/gdx/Application.java
file - в PHP (с PSR-0): класс
Symfony\Component\HttpKernel\Kernel
будет найден в файлеsrc/Symfony/Component/HttpKernel/Kernel.php
- in Java: class
- Foreign class symbols can be imported into the current scope via a specific statement:
- in Java:
import com.badlogic.gdx.Application;
- в PHP:
use Symfony\Component\HttpKernel\Kernel;
- in Java:
Я привык к такому типу организации проекта, но понимаю, что он специфичен для языков на основе классов / пространств имен и может не соответствовать обычным идиомам JavaScript / Node.js. Если я правильно понимаю концепцию модулей Node.js, это 1 исходный файл = 1 модуль, но из того, что я видел во многих пакетах NPM, модуль обычно экспортирует более одного символа, и чаще всего этот экспорт является функциями, а не классами / конструкторами, поэтому он сильно отличается от соглашений, описанных выше.
Итак, у меня есть следующие вопросы:
- В JavaScript / Node.js уместно ли вообще думать о распределении ответственности в терминах «только классов» (используя либо традиционный метод конструктор + композиция прототипа, либо новое сокращение
class
)? - Возможен ли вообще описанный выше тип организации проекта в контексте проекта Node.js?