СЕТЬ: Лучшие Методы/инструкции для деления пространств имен между файлами?

Вы можете использовать остальные параметры ... , собрать все аргументы обеих функций и вернуть уменьшенный результат.

function multiply(...a) {
    return function(...b) {
        return [...a, ...b].reduce((a, b) => a * b);
    };
}

console.log(multiply(4)(5));       //  20
console.log(multiply(2)(4, 5));    //  40
console.log(multiply(3, 2)(4, 5)); // 120

11
задан Matias Nino 26 January 2009 в 22:44
поделиться

5 ответов

Ответ на этот вопрос не является абсолютным, поскольку он часто зависит от задачи, Вы имеете под рукой. Если Вы создаете некоторый SDK для повторного использования другими, то пространства имен очень важны; однако при создании внутреннего инструмента со всего несколькими классами пространства имен в значительной степени неважны.

Классы

Вообще говоря, классы должны иметь свой собственный файл, поскольку это упрощает, как люди перешли вокруг решения для кода, помогающего с разработкой и обслуживанием (намного более трудно объединить изменения, когда все изменяют те же файлы, например). Может быть приемлемо разделить один класс через несколько файлов в некоторых ситуациях, таких как:

  • Когда существуют вложенные классы, каждый вложенный класс мог иметь свой собственный файл.

  • Когда существуют автоматически сгенерированные части к классу, такие как код разработчика.

  • Когда существуют зафиксированные части к классу, такие как единый набор скрытых свойств или общая реализация интерфейса.

В одном из наших проектов у нас есть общая реализация интерфейса, который выставляют много классов. Поскольку у нас нет множественного наследования, мы берем соединение - в подходе, посредством чего мы автоматически генерируем дополнительный файл для каждого класса. Это могло быть сделано вручную, вместо автоматически (и был, первоначально).

Существуют другие ситуации, но это несколько субъективно и зависит от требований Вашего собственного проекта.

Пространства имен

Пространства имен должны обычно фокусироваться на разумных группировках Ваших типов. Пространство имен должно позволить разработчику интуитивно определять местоположение того, что они ищут. Для многих маленьких проектов, единое пространство имен такой как MyAwesomeTool достаточно, но для большего проекта со многими классами будет нуждаться в более логической группировке. Такие крупные проекты, как SDKs или BCL.NET полагаются на пространства имен к разбивке иначе в подавляющем большинстве большое количество типов. Каждый уровень пространства имен предоставляет дополнительную информацию того, что могло бы быть найдено там, такой как System.Windows.Forms или System.Drawing или Microsoft.VisualBasic.

При создании пространств имен каждое внимание должно быть уделено цели того пространства имен и связанного проекта. Если проект является внутренним и маленьким, назовите пространство имен, что Вы любите, поскольку это - просто необходимость группировки Ваших типов; если проект внешне видим или содержит большую сумму типов, думайте тщательно о логических и значимых группировках, которые позволят другим интуитивно найти типы, которые они ищут.

Заключение

Нет никаких жестких правил, которые работают в каждой ситуации. То, как Вы располагаете свой код в файлы, касается Ваших собственных процессов разработки, влияя на Вас и Вашу команду; все Ваши классы в одном файле будут адом для разработки с, но скомпилированный продукт не будет действовать несколько отличающийся (если один подход файла не привел к ошибкам), тогда как расположение пространств имен касается будущей разработки и потребителей тех пространств имен, таким образом, последствия понимания превратно его могут быть более серьезными.

  • Стремитесь организовывать свои классы способом, который упрощает текущую разработку и будущее обслуживание.
  • Стремитесь организовывать свои пространства имен способом, который упрощает всю разработку и, в соответствующих случаях, опыт Ваших конечных пользователей.
12
ответ дан 3 December 2019 в 04:34
поделиться

В большинстве рекомендаций, которые я видел, говорится, что каждый открытый тип должен быть в его собственном файле, и пространства имен должны представить структуру папок приложения.

4
ответ дан 3 December 2019 в 04:34
поделиться

Я делаю 99% от 1 до 1 класса в файл. Единственное исключение - то, если у Вас есть большое количество или очень простые небольшие классы, которые вся реализация тот же интерфейс и не должна изменять очень. Вы могли бы хотеть просто идти вперед и поместить их в один файл. Пользовательскими исключениями может быть хороший пример. Большую часть времени (по моему опыту), нет никакого кода кроме создания пользовательских сообщений или вещей той природы.

Пространства имен должны быть организованы сначала разделением проблем. Объекты данных должны быть в другом пространстве имен, чем объекты области, например. Затем у Вас мог бы быть меньший субдомен для каждой группы объектов на "совокупном корневом" уровне. Обычно, каждое из этих самых маленьких пространств имен соответствует своему собственному проекту и DLL.

1
ответ дан 3 December 2019 в 04:34
поделиться

Должно быть непосредственное отображение между классами и исходными файлами.

Пространства имен должны считаться пакетом, который может охватить один или несколько классов. Где возможный может быть полезно представить их как папки/просачиваться окно проекта Visual Studio.

При нахождении большого класса, Вы чувствуете, извлек бы выгоду из того, чтобы быть разделенным на отдельные файлы, затем вместо этого рассматривают рефакторинг и разделение самого класса.

(Приемлемым) исключением к этому является код, который генерирует UI, который Visual Studio помещает в отдельный файл. Я рекомендовал бы оставить это в его собственном файле и рассматривать его как прозрачный файл, находящийся в собственности редакторов как можно больше.

6
ответ дан 3 December 2019 в 04:34
поделиться

Что касается классов, я придерживаюсь правила Java: «Один открытый класс на файл» Я могу включить частный класс в общедоступный, если этот публичный класс является единственным пользователем. (Хотя перечисления делают это менее важным фактором); Однако, если он используется многими общедоступными классами в одном и том же пространстве имен, я помещу его в отдельный файл.

Я предпочитаю использовать пространства имен в следующих строках:

MyAwesomeApp.UI
MyAwesomeApp.Business
MyAwesomeApp.Data

, чтобы отразить разделение слоев.

1
ответ дан 3 December 2019 в 04:34
поделиться