Рехнувшись со слабой связью и внедрением зависимости

Назовите меня ленивым, но кодирование конвертера похоже на много ненужной работы. Я использую Primefaces и, не использовав простой список валиний JSF2 или выпадающее меню раньше, я просто предположил (ленивый), что виджет может обрабатывать сложные объекты, т. Е. Передавать выбранный объект так же, как и его соответствующий геттер / сеттер многие другие виджеты. Я был разочарован тем, что (после нескольких часов царапин на голове) эта возможность не существует для этого типа виджетов без конвертера. На самом деле, если вы поставляете сеттер для сложного объекта, а не для строки, он терпит неудачу (просто не вызывает сеттер, исключение, отсутствие ошибки JS), и я потратил массу времени, пройдя через BalusC отличный инструмент устранения неполадок , чтобы найти причину, безрезультатно, поскольку ни одно из этих предложений не применялось. Мой вывод: виджет listbox / menu нуждается в адаптации к тому, что другие виджеты JSF2 этого не делают.

В конце концов я сопротивлялся кодированию конвертера и обнаружил через пробную версию и ошибку, что, если вы установите значение виджета на сложный объект, например:


... когда пользователь выбирает элемент, виджет может вызывать установщик String для этого объекта, например setSelectedThing(String thingString) {...}, а переданная строка - это строка JSON, представляющая объект Thing. Я могу проанализировать его, чтобы определить, какой объект был выбран. Это немного похоже на хак, но меньше на взломе, чем на конвертер.

16
задан krosenvold 9 January 2009 в 16:50
поделиться

3 ответа

Чистый DI идеальная вселенная, я думаю, что единственный дизайн classes+method идеален. В действительности мы должны сбалансировать стоимость того, что делает ее менее выполнимой.

Факторы стоимости

  • Наверху DI. Вращение всех базовых и связанных underlyings для отдельного метода является дорогим. Группировка в класс позволяет нам смещать часть этого.
  • Навыки - DI в новинку для многих (самостоятельно ОСОБЕННО) настолько понимающий, как сделать это лучше или выйти из старых/обычных проектов, жесток
  • полевые приложения Brown, которые уже имеют их, легче/более дешево/более быстро жить с ними и беспокойством об этом в будущих приложениях зеленого поля

, Надо надеяться, мой мыс новичка (да, я переполнен составленными словами) с DI, не сделал меня полностью неправильно с этим.

2
ответ дан 30 November 2019 в 22:37
поделиться

Я могу думать о двух причинах.

Пригодность для обслуживания: Вы будете естественно ожидать, что некоторая логика будет сочетаться. Логика, которая определяет операции на одном конкретном внешнем сервисе, например, база данных, должна, вероятно, группироваться логическим способом. Можно сделать это в пространстве имен или классе.

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

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

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

3
ответ дан 30 November 2019 в 22:37
поделиться

Если вы не можете указать имя столбца в ORDER BY , вы не можете использовать DESC , и вам придется прибегнуть к уловкам, включающим LIMIT , чтобы увидеть несколько последних записей.

Это я думаю, было бы неудовлетворительным.

вероятность того, что изменение e затем изменит компонент c, не может быть больше, чем вероятность того, что изменение e изменит затем d. А в реальных программных системах вероятность того, что изменение e повлияет на c, обычно меньше, чем вероятность того, что изменение e повлияет на d.

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

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

Теперь вернемся к потенциальной связи. Можно показать, что в контексте абсолютной инкапсуляции (например, Java или C #, где рекурсивная инкапсуляция широко не применяется) все компоненты потенциально связаны друг с другом через прямую или косвенную зависимость с одним промежуточным компонентом. Статистически система, которая сводит к минимуму прямую потенциальную связь между ее компонентами, сводит к минимуму потенциальную стоимость эффекта пульсации из-за любого обновления.

И как мы можем добиться этого различия между прямой и косвенной потенциальной связью (как будто мы не знаем '' т уже кота из мешка выпустили)? С инкапсуляцией.

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

Это обязательно требует некоторого типа контейнера группировки, в котором информация может быть неким более детализированным функционалом. -hidden.

Вот почему мы, «Группируем», вещи.

Что касается того, почему мы используем классы для группировки вещей:

A) Классы обеспечивают поддерживаемый языком механизм инкапсуляции.

4
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: