Подумайте об использовании строгого режима для раннего обнаружения ошибок - с ним ваш код приводит к
Uncaught TypeError: Невозможно создать свойство 'b' для строки 'abc'
blockquote> [ 117]'use strict'; const module = {}; module.exports = "abc"; module.exports.b = function() { console.log("b"); };
В неаккуратном режиме назначение свойства не будет выполнено в молчании .
Вместо этого экспортируйте строку и функцию отдельно.
module.exports = { fn: function() { console.log('b'); }, str: 'abc' };
Действительно хорошая притча появилась на дискуссионной группе Joel по этой теме несколько лет назад. Историю называют Почему я Платформы Ненависти.
Ах да!
В моем последнем задании, работающем над довольно крупным проектом, у нас была команда архитектуры, которые помещают на месте целую платформу, которую мы использовали. Они разработали пользовательский ORM (приблизительно 2000, Будьте в спящем режиме, не было так же повсеместно как сегодня), и пользовательская платформа RCP на основе Swing.
ORM не был всем настолько плохо. Они были просто чрезмерно обеспокоены круговыми зависимостями так в некоторых случаях, у нас было довольно плохое время для выражения нашей модели предметной области, поскольку бизнес действительно требовал круговых зависимостей (бизнес-объекты могли течь оба пути между различными административными модулями).
Платформа Swing была адом. Они пытались реализовать компонентную модель с чем-то походящим немного на иерархический контроллер. Это выглядело действительно хорошим на бумаге: у Вас может быть компонент, который может быть снова использован. Модель, представления и контроллер были ясно разделены. Но в действительности, платформа не обеспечила достаточно гибкости, таким образом, мы должны были сохранить ссылки на JComboBox для получения данных через уровни абстракции. Мы должны были записать 4-5 классов для каждого маленького кусочка UI. В некоторых случаях потребовались дни для добавления флажка на форме. Отладка была ужасна, поскольку технологический маршрут проходил 15-20 классов для каждой простой операции. Удивительно, действия были в порядке.
Худшая вещь, каждый компонент Swing был перенесен в уровень абстракции "в случае, если мы хотим изменить инструментарий UI"!
Я всегда думал Это Привет, Мировая реализация была хороша, также.
Мой друг работает в крупном масштабе DB, где все должно убывать от пользовательского класса "Любой"
/ дрожь
В каждом месте я работал в течение прошлых пяти лет!
Мои официальные должности содержали "архитектора" в течение прошлых шести лет, но, в сварливый день я - больше антиархитектора, в менее сварливые дни я - "минималистский архитектор".
Если нет хорошего staighforward и очевидной причины компонента, платформы или функции, чтобы быть там затем, я отбрасываю его!
В случаях, где я был отвергнут, дополнительные uneccsary architecural функции всегда оказывались самой большой проблемной областью.
Компания я работаю на продукт приложение, которое имеет базу данных бэкенда SQL Server. Одна из основных таблиц требует соединения с собой шесть раз прежде, чем вытащить любые значимые данные из него!
Это недавно было на reddit с пользой "эй dawg" шутка.
Представление: RequestProcessorFactoryFactory
Обсуждение Reddit здесь
Если Вы не прочитали статью Joel об Астронавтах Архитектуры (Живой Сетчатый), я рекомендую это - это - хорошее чтение об этом предмете.
Моим фаворитом является "автоархитектура". В основном просто ряд правил, который, если Вы следуете за архитектурой, встает на свое место правильно....., по-видимому.
Таким образом, это приводит к каждому объекту, имеющему интерфейс независимо от того, были ли ему нужны абстракция и фабрика (не новый () для Вас!), поскольку Каждый сервис... вздыхает.
Нет.
Разве архитектура не должна быть зависима от требований?
Мой главный объект неприязни является "архитекторами", которые не понимают реляционных понятий и пытаются заставить вещи работать объектным способом, когда базы данных работают лучше основанным на наборе способом и должны быть разработаны, чтобы использоваться тот путь. (Базы данных не должны быть разработаны превращенными архитекторами объектно-ориентированных программистов, они должны быть разработаны специалистами по базе данных), И архитекторы, которые думают, что это Более "изящно", чтобы поместить несколько вещей в одну основную базовую таблицу (сверхобобщение) и затем закончиться с более чем 100 внешними ключами к той таблице и каждому запросу, ссылающемуся на него и главному кошмару производительности (а также смешной процесс для движения до удаляют запись).