none
MVVM-так? RRS feed

  • Вопрос

  • WPF C#.

    Подскажите пожалуйста. В продолжении этой темы

    У меня есть ObservableCollection<Data>

    в ней например поля Name, Famaly.

    Data наследуется от InotifyPropertyChange

    И есть окно в котором есть два TextBox1.Text={Binding Name}... TextBox2.Text={Binding Famaly}...

    Когда я ввожу что-то в TextBox то в коллекции значения меняются - проверял. И потом при закрытии окна или выгрузке UserControl я коллекцию сохраняю в базе. А когда загружается UserControl или Window из базы гружу в коллекцию и в TextBox -ах появляются данные.

    Это и есть MVVM?

    И ещё Frame c UserControl1 в Grid -е какого-нибудь окна чем отличается от UserControl1 в Grid -е такого-же окна?

    Сейчас я обращаюсь из окна в дочерний UserControl через делегаты.

    А если будет Frame c UserControl то кроме автоматического подключения к кнопкам управления смогу ли я как то напрямую без делегатов обращаться к элементам интерфейса в UserControl1 если он находится не просто в Grid, а во Frame?

    15 марта 2016 г. 8:38

Ответы

  • Добрый день.

    MVVM это когда у вас разделены три слоя Model (объекты с которыми вы работаете), ViewModel (бизнес-логика) и View (отображение).  Более подробно можете почитать здесь и здесь.

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

    По поводу вложенности проблем быть не должно, но опять же, надо понимать что у вас там MVVM или нет.

    • Помечено в качестве ответа DevingAs 15 марта 2016 г. 12:41
    15 марта 2016 г. 10:42
    Отвечающий
  • В 99,9% случаев таких записей быть не должно.
    У нас в проектах большинство файлов cs у контролов выглядят так:

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

    • Помечено в качестве ответа DevingAs 15 марта 2016 г. 13:34
    15 марта 2016 г. 12:53
    Отвечающий

Все ответы

  • Добрый день.

    MVVM это когда у вас разделены три слоя Model (объекты с которыми вы работаете), ViewModel (бизнес-логика) и View (отображение).  Более подробно можете почитать здесь и здесь.

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

    По поводу вложенности проблем быть не должно, но опять же, надо понимать что у вас там MVVM или нет.

    • Помечено в качестве ответа DevingAs 15 марта 2016 г. 12:41
    15 марта 2016 г. 10:42
    Отвечающий
  • т.е. MVVM это когда в контроле TextBox вообще нет подобных записей в XAML <TextBox Name="TXTB" SelectionChanged="TXTB_SelectionChanged"?/>

    И все действия через ICommand?


    У меня все действия с базой данных сейчас в одном отдельном классе ToBaseQuery.cs

    В нём отдельно возвращаемые коллекцию данных методы. А в SelectionChanged=" в нужном месте я пишу DataContext  = коллекция или ItemSource = коллекция.

    Т.е. извлечение данных из базы и запись данных в базу в одном месте, и я каждый раз не пишу один код для извлечения данных Person. Т.е. вместо Command={Binding LoadPersonData} у меня будет строчка в методе кнопки Click_ButtonLoad

    {

    ToBaseQuery _tbq = new ToBaseQuery();

    ObservableCollection<PersondataCC> _obs = _tbq.LoadPersonData(45);

    Grid.DataContext = _obs;

    }

    ObservableCollection<PersondataCC>LoadPersonData(int ID)

    {

    ...

    }

    Но ведь вроде бы тоже отделено.

    • Изменено DevingAs 15 марта 2016 г. 13:00
    15 марта 2016 г. 12:43
  • В 99,9% случаев таких записей быть не должно.
    У нас в проектах большинство файлов cs у контролов выглядят так:

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

    • Помечено в качестве ответа DevingAs 15 марта 2016 г. 13:34
    15 марта 2016 г. 12:53
    Отвечающий
  • Всё, теперь - что-то в голове уложилось в небольшой но порядок. Спасибо. Потестирую на пробных проектах.


    Чувствую. Нужно начинать с нуля
    • Изменено DevingAs 15 марта 2016 г. 13:39
    15 марта 2016 г. 13:36
  • А вот по поводу сравнения MVC MVVM расскажите.

    Актуален ли первый шаблон сейчас?

    Моделью можно ли считать базу данных?

    Или она может содержать скрипты тоже?

    23 марта 2016 г. 14:07
  • Добрый день.

    MVVM это адаптация шаблона MVC под WPF, т.е. идея та-же, но есть особенности реализации. Т.к. на момент появления этого паттерна в мире .Net название MVC уже ассоциировалось с веб-приложениями, то чтобы не вводить раздрай, придумали новое имя. Собственно MVC актуален (я бы даже сказал очень актуален) в Web разработке.

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

    P.s. Коллега, на будущее, один топик - один вопрос. Так потом проще искать по форуму.

    23 марта 2016 г. 14:26
    Отвечающий
  • Добрый день.

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

    Сущности в модели - это база данных или именно программный код?

    К примеру, в приложении под Win 7 есть UI, C#, MS SQL (View, controller, model).

    Это мне так видится данный паттерн (архитектура).

    ----------------------------------

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

    MVC? ;)

    • Изменено royalpiano 23 марта 2016 г. 19:18
    23 марта 2016 г. 16:24
  • Лучше для новых вопросов создавать отдельные темы. Ваша могла бы иметь заголовок "Что входит в модель в паттерне MVVM?".

    Модель это то что абстрагирует от вас способ хранения данных. Сюда могут относиться сущности Entity Framework (если вы его используете для доступа к данным), но не только. У вас все равно будет что-то еще про предметную область что не содержится в БД, это тоже будет модель. Но вот как с объектами модели работать это уже ViewModel.

    >> MVC? ;)

    Нет. Как я уже сказал, MVVM и MVC это больше технологические заморочки по связи слоев, но если V и C или V и VM так тесно связаны, то нет, это не один из этих паттернов.

    24 марта 2016 г. 8:45
    Отвечающий
  • спасибо, учту. Насколько важно вообще использовать этот паттерн? Если у вас не он,

    то и за продукт, условно говоря, не заплатят?

    27 марта 2016 г. 12:14
  • Разумное применение паттернов позволяет упростить разработку (не изобретать велосипеды), упростить поддержку и т.д.

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

    27 марта 2016 г. 12:32
    Отвечающий