Должен ли я использовать привязку данных в моем проекте Windows Forms? - PullRequest
8 голосов
/ 06 марта 2011

Я разрабатываю приложение с Winforms и пошел по пути привязки данных к моим сеткам, используя BindingSource. Мой вопрос:

Это лучший подход? Должен ли я вручную заполнять ячейки вместо того, чтобы позволить BindingSource сделать это для меня? Может ли это привести к проблемам в дальнейшем? Если есть какие-либо ситуации, когда привязка данных может создать проблемы, это будет полезно.

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

В случае многопользовательского приложения, подключающегося к одной базе данных и редактируемого DataGrid s, как бы вы решили проблемы параллелизма при обновлении данных?

Ответы [ 5 ]

14 голосов
/ 06 марта 2011

ругаться черным и синим о чем угодно без объяснения причин, если честно, глупо.

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

Для простого отображения данных, отлично! Это сэкономит вам много времени и ошибок. Для прямого обновления данных (включая логику свойств и поддержку IDataErrorInfo), опять же, great !. И действительно, это основная часть WPF и т. Д.

Есть сценарии, в которых это не очень полезно:

  • большие объемы данных (где помогает «виртуальный» режим или лучше: не отображать 10 миллионов строк; это никому не полезно)
  • если вы не хотите, чтобы обновления были прямыми, а скорее: отложенными - хотя привязка к модели представления (а не к вашей доменной модели) является хорошим контраргументом этому
  • когда у вас много разных потоков, пытающихся привязаться к одним и тем же данным (опять же, здесь помогают независимые модели представления)

Я бы спросил вашего коллегу "почему"; и если они не могут дать вескую причину, я был бы склонен их игнорировать. Без разумного обсуждения это просто ФУД.

5 голосов
/ 06 марта 2011

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

С Концепции привязки данных в формах Windows. :

Преимущества привязки данных

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

  2. .NET автоматически пишет много кода привязки данных для вас в фоновом режиме(вы можете увидеть это в разделе «Код, сгенерированный Windows»), поэтому разработчику не нужно тратить время на написание кода для базового связывания данных, но при этом он может изменять любой код, который ему нравится.Мы получаем преимущества как связанного, так и несвязанного подхода.

  3. Контроль над процессом привязки данных с помощью событий.Это обсуждается более подробно позже в статье.

Недостатки привязки данных

  1. Более оптимизированный код может быть написан с использованием несвязанных или традиционных методов.

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

Для более подробного разъяснения вы должны увидеть Понятия привязки данных в формах Windows.

3 голосов
/ 06 марта 2011

Я не вижу проблем с компонентом BindingSource. Единственное предложение не использовать нетипизированные наборы данных. Используйте BindingList с классами и все готово.

BindingSource определенно лучше, чем традиционная привязка данных.

Вы можете прочитать все о Архитектура компонентов BindingSource .

Один очень простой пример:

С Databindings очень просто преобразовать данные из базы данных во что-то полезное. Например, у вас есть десятичный столбец в базе данных со средней суммой валюты:

С помощью привязок данных вы можете легко отобразить их как валюту:

private void DecimalToCurrencyString(object sender, ConvertEventArgs cevent)
{
   // The method converts only to string type. Test this using the DesiredType.
   if(cevent.DesiredType != typeof(string)) return;

   // Use the ToString method to format the value as currency ("c").
   cevent.Value = ((decimal) cevent.Value).ToString("c");
}

private void CurrencyStringToDecimal(object sender, ConvertEventArgs cevent)
{
   // The method converts back to decimal type only. 
   if(cevent.DesiredType != typeof(decimal)) return;

   // Converts the string back to decimal using the static Parse method.
   cevent.Value = Decimal.Parse(cevent.Value.ToString(),
   NumberStyles.Currency, null);
}

private void BindControl()
{
   // Creates the binding first. The OrderAmount is a Decimal type.
   Binding b = new Binding
      ("Text", ds, "customers.custToOrders.OrderAmount");
   // Add the delegates to the event.
   b.Format += new ConvertEventHandler(DecimalToCurrencyString);
   b.Parse += new ConvertEventHandler(CurrencyStringToDecimal);
   text1.DataBindings.Add(b);
}

Ссылка на источник http://msdn.microsoft.com/en-us/library/system.windows.forms.binding.format.aspx

1 голос
/ 06 марта 2011

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

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

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

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

1 голос
/ 06 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...