К свойству, или не к свойству?

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

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

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

Привязка данных только возможна к свойствам объектов (насколько я взялся за работу). Это означало бы, что мне будет нужен объект, предпочтительно с поддержкой INotify и диапазоном объектов. Однако я предпочел бы сохранять INotify и вещи WPF вне блока, который обрабатывает доступ к базе данных.

Как делают другие решают это: Сохраните вещи WPF вне слоя базы данных (такие как INotify), и в Вашем WPF позволяют связывать? Записать обертку? Или большинство людей помещает 'свойство'/'INotify' класс как объект передачи данных непосредственно на слой базы данных?

5
задан Jaapjan 25 January 2010 в 16:14
поделиться

6 ответов

Вы работаете под неправильным представлением. inotifyPropertyChanged не вещь WPF. Рассмотрим:

  1. Это является частью System.dll
  2. , он находится в пространстве имен System.comPonentModel
  3. , это было частью в Net Framework с версии 2.0
  4. Поддерживается большинство чистых объектов данных Framework Data из коробки, включая DatarowView Ado.net и ComponentModel .
  5. Это автоматически используется WinForms, ASP.NET, WPF и многими сторонним пакетами для взаимодействия с объектами данных.

Поскольку все автоматически сгенерированные слои данных Microsoft производит реализацию inotifyPropertyChanged , почему вы должны относиться к вашему слой данных по-другому? Очевидно, что ваш слой данных должен как-то уведомить своих клиентов при изменении свойств. Почему бы не использовать встроенный механизм NET Framework?

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

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

3
ответ дан 13 December 2019 в 19:27
поделиться

Другие люди решают это, внедряя MVVM шаблон дизайна.

7
ответ дан 13 December 2019 в 19:27
поделиться
-

Я думаю, что самое чистое решение состоит в том, чтобы написать объект обертки в вашей монтаже WPF и сохранить INOTIFY типов из сборки базы данных. Нет причин добавлять осложнение inotify к слою базы данных, если он не предоставляет конкретного преимущества.

1
ответ дан 13 December 2019 в 19:27
поделиться

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

0
ответ дан 13 December 2019 в 19:27
поделиться

Вы можете посмотреть POSTSHARP , это просто та вещь, ориентированная на аспекцию программирование (AOP). Существует множество примеров плетение inotify * в модели модели. Я еще не начал использовать PostSharp в реальном проекте, но он выглядел перспективным в некоторых тестовых сценариях, которые мы его пробовали.

0
ответ дан 13 December 2019 в 19:27
поделиться

Еще одна вещь, которую нужно отметить, что полезно - если вы знаете, что собственность, которую вы обязательно, неизменно (то есть объект Singleton или что-то, что будет инициализировать один раз и никогда не трогать), вы Не нужно Необходимо сделать его inotifyPropertyChanged - простое свойство будет работать нормально.

0
ответ дан 13 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

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