Связаны ли данные с плохими идеями?


18

Другая дискуссия (в наши дни у нас их много!) В нашей работе заключается в том, является ли привязка данных плохой идеей или нет.

Лично я считаю, что это плохая вещь.

Моих причины трижды:

  1. Он обходит мои хорошо MVP рамки стиля и с архитектурными - с привязкой данными, вид общается с двунаправленным с моделью. Ewww.

  2. Он способствует подключению элементов управления к полям данных во время разработки. По моему опыту, это приводит к жизненному коду (привязка столбца A к полю X), который неясен и скрыт в каком-либо файле дизайнера. IMO этот код должен быть явным и в вашем лице, так что его легко изменить и посмотреть, что происходит, без использования неуклюжего интерфейса дизайнера.

  3. В связи с пунктом № 1 это прямое связывание затрудняет выделение каждого компонента (вид, модель, контроллер/презентатор) и блок-тест.

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

Но для меня привязка данных становится намного более серьезной проблемой при работе с большим приложением, ориентированным на данные.

Любые мысли?

2

@Point 1: Не является ли механизм привязки данных контроллером, если вы действительно хотите думать о шаблонах? Вы просто не программируете его самостоятельно, и в этом весь смысл использования привязки данных.


5

Как мы говорим в Великобритании, «Это лошадей для курсов»

Прежде всего, я с вами согласен! Но ...

Для приложений уровня предприятия, проводя дополнительное время на архитектуре системы, моделировании и стандартах, вы получите надежную и устойчивую систему.

Но для разработки (или, по крайней мере, дольше, чтобы добраться до первоначальной версии) потребуется больше времени, и это может оказаться неприемлемым для каждой системы или каждой части системы.

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

Что нужно избегать/предотвращать использование этих решений с одним щелчком мыши в области MISSION CRITICAL в системе, где важны большая область транзакций и где качество и целостность данных являются критическими. Проведите качественное время, бреяя миллисекунды на самой сильно используемой области в системе!


0

@Timbo:

Да и нет .... но с точки зрения TDD я хотел бы кордон выключения каждого контроллера, так что я могу проверить его в изоляции.Кроме того, скажем, мы хотим запускать каждое редактирование с помощью EditCommand (так, например, поддерживаем Undo) - для меня это исключает привязку данных.

@Guy:

Да, это именно мой POV. Для меня привязка данных отлично подходит для очень простых приложений, но мы никого из них не делаем!

  0

Связывание данных не обязательно исключает поддержку редактирования на основе команд. Существует реализация JFace DataBinding для EMF, которая отправляет все изменения с помощью командной фреймворка. Я не использовал это, но я слышал, что он работает отлично. 25 сен. 082008-09-25 13:44:40


4

Еще одна дискуссия (в наши дни у нас их много!) В нашей работе является ли привязка данных плохая идея или нет.

Лично я считаю, что это плохая вещь.

Сильное мнение, но imho, вы выявляете все неправильные причины.

  1. Он обходит мои хорошо MVP рамки стиля и с архитектурными - с привязкой данными, вид общается с двунаправленным с моделью. Ewww.

    Я думаю, это зависит от реализации привязки данных. В ранние годы моей карьеры в программировании я использовал множество программ VBA для MS Access и форм доступа, действительно, это прямая привязка к таблицам/полям в базе данных.

    Большинство языков общего пользования/фреймворков имеют привязку данных в качестве отдельного компонента, не используют такую ​​прямую привязку и обычно считаются простым общим падением для контроллера в смысле шаблона MVC.

  2. Он способствует подключению элементов управления к полям данных во время разработки. По моему опыту, это приводит к жизненному коду (привязка столбца A к полю X), который неясен и скрыт в каком-либо файле дизайнера. IMO этот код должен быть явным и в вашем лице, так что его легко изменить и посмотреть, что происходит, без использования неуклюжего интерфейса дизайнера.

    Я думаю, вы говорите о привязке в WinForms?

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

  3. В связи с пунктом № 1 это прямое связывание затрудняет изоляцию каждого компонента (вид, модель, контроллер/презентатор) и блок-тест.

    Опять же - при условии, что вид (виджет в WinFoms?) Связан с осознанием данных, вы правы.

Но для меня, становится гораздо привязки больше помехи при работе с большим приложением данных, ориентированными.

Совсем наоборот - если привязка данных реализована как независимый компонент (например,привязки в Cocoa или JFace DataBinding, или JGoodies Binding), который действует как контроллер между View и Model, заботясь обо всех деталях обработки событий и преобразования и проверки, тогда это намного проще в использовании, изменять и заменять, чем ваш пользовательский код контроллера, делая то же самое.

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


0

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


0

Я использовал привязку данных к крупным корпоративным системам, не связанным с каркасом. В моем случае это была CSLA.

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

Если это нарушает паттер MVP, то что? если он работает лучше и быстрее и легче управлять. Тем не менее, я бы сказал, что он вообще не нарушает patturn ... Вы можете подключить databind в презентаторе, поскольку он имеет ссылку на представление, а также на модель.

Например, это то, что вы бы поставили в своем презентаторе, и оно заполнило бы окно списка или любой необходимый элемент управления.

myView.list.datasource = myModel.myCollection;

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

Алан


3

Я использовал в некоторых привязки данных довольно больших систем и обнаружить, что она работает очень хорошо.

Кажется, что я делаю вещи немного иначе, чем вы, хотя ...

... Я не привязка к модели, а не к выделенному классу представления, который работает в качестве переходника между структурой модели и что мне нужно на экране. Это включает в себя такие вещи, как предоставление выбора для списков со списком & и т. Д.

... Я никогда не настраивал привязку с помощью пользовательского интерфейса. Вместо этого, у меня есть один метод (обычно называемый Bind() или BindXYZ(), которая перехватывает все в одном месте

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


0

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

Но могут ли быть некоторые изящные способы работы с привязкой данных большими формами?

Пожалуйста, дайте мне ваше мнение здесь: How to use a binding framework efficiently


1

No. DataBinding при правильном использовании хорошая вещь ™.

  1. Нет; но см. № 2 и № 3. Сделайте пресвитера разоблачением свойств/четко определенных источников для привязки. Не подвергайте модель. Ничто не обходится.

  2. Я согласен. Я не использую любые стандартных источников данных ASP.NET. Вместо этого я использую GenericDataSourceControl, который подключен к «методу выбора», который возвращает четко определенные типы. Пользователи DataSource в представлении View знают только эти типы Presenter; больше ничего.

  3. № Относительно # 1. Презентатор предоставляет свойства/четко определенные источники для связывания. Они могут быть протестированы без проверки правильности (модульные тесты) и с учетом правильности применения (интеграционные тесты).

(Мой опыт использует ASP.NET WebForms, которые могут отличаться от других сценариев связывания данных.)

  0

Steali- применяя ваше форматирование вопроса, brb 11 июл. 122012-07-11 19:14:21


2

У меня был несколько незыблемых реализаций о связывании данных за последние несколько лет:

  1. Утверждение о том, что привязка данных позволяет создавать бизнес и презентацию отдельно друг от друга, на самом деле действительно далека от того, что на самом деле происходит в действительности. Обычно недостатки в технологиях становятся очевидными, а затем все, что вы сделали, - это разделить пользовательский интерфейс от специфического для пользовательского интерфейса бизнеса, и в результате разделение часто становится намного более громоздким, чем подход «все в одном».

  2. Большинство механизмов привязки данных (HTML/WPF/и т. Д.) Все делают утверждения в технической бизнес-модели, и поскольку разработчик обычно не оборудован, чтобы делать указанные утверждения, разработчику приходится прикасаться к виду. Мало того, мнение не должно делать утверждений о бизнес-модели - в любом случае это должно быть наоборот.

  3. В большинстве случаев модель представления/контроллер/модель/вид все «соединены», а затем все, что вы действительно сделали, это «перемещать код вокруг», а не просто использовать код позади. С учетом сказанного, я нахожу, что наиболее прагматичный подход часто заключается в том, чтобы просто использовать привязку данных с учетом кода и забыть о шаблонах esv MVVM/MVC.

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

  5. Следует признать, что привязка данных полезна для «малых систем». Я заметил, что производительность, сложность и ремонтопригодность резко страдают по мере того, как приложение растет в богатстве.

  6. Способы использования памяти с привязкой данных часто могут стать реальной опасностью.WPF, например, использует много обманщиков, чтобы избежать проблем, и часто разработчики все еще могут стрелять в ногу. Если вы не используете что-то вроде Sencha для HTML (я думаю), вы обнаружите, что печать вашей памяти в ваших приложениях начинает страдать даже при небольшом количестве данных.

  7. Я обнаружил, что шаблоны привязки данных/UI в целом иногда имеют тенденцию ломаться при работе с иерархическими и ситуационными данными/презентацией.

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

...