Подтвердить что ты не робот

Неужели данные привязывают плохую идею?

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

Лично я считаю, что это Bad Thing ™.

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

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

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

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

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

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

Любые мысли?

4b9b3361

Ответ 1

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

Прежде всего, я согласен с тобой! Но...

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

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

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

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

Ответ 2

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

Лично я считаю, что это Bad Thing ™.

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 3

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

Кажется, я делаю что-то совсем не так, как вы, хотя...

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

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

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

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

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

...

Ответ 6

Нет. DataBinding при правильном использовании - это Good Thing ™.

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

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

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

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

Ответ 7

@Timbo:

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

@Guy:

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

Ответ 8

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

Ответ 9

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

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

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

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

myView.list.datasource = myModel.myCollection;

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

Алан

Ответ 10

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

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

Пожалуйста, дайте мне свое мнение здесь: Эффективно использовать структуру привязки