Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM и куча вопросов / 25 сообщений из 62, страница 1 из 3
09.09.2010, 15:49
    #36838271
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
Все замечательные (немногочисленные примеры) показывают нам и говорят что данный шаблон просто спасение души и его самая замечательная особенность что можно отделить лицо от view
и что ни одна из частей не знает друг о друге!

Но у меня возникает вопрос - а где же реализовывать бизнес-логику по вводу данных??
Пример: имеет 2 комбобокса с данными типа (к примеру) "Склады" и "Товары"
бизнес логика говорит что в итоге я должен выбрать только товар, находящийся на данном складе и вот тут возникает проблема - если фильтровать данные в модели - этож скока кода и геморра надо поиметь шоб все это вручную реализовывать, а если это сделать всего лишь парами параметров в XAML - нарушаецца идеология такого замечательного шаблона!

Как быть? может надо использовать MVVMExt???? ))
...
Рейтинг: 0 / 0
09.09.2010, 15:51
    #36838276
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
sp,

да поддерживаю вопрос .
...
Рейтинг: 0 / 0
09.09.2010, 15:55
    #36838283
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
ааа, и вдогонку - смотрю кучу примеров там и у модели куча своих методов и у view куча своих методов - непонятно - то есть логика свободно гуляет между этими 2мя частями??? куда что помещать? где граница что должен делать объект и его view?
...
Рейтинг: 0 / 0
09.09.2010, 16:09
    #36838304
i
i
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
sp
Пример: имеет 2 комбобокса с данными типа (к примеру) "Склады" и "Товары"

В VM должен быть каскадный lookup.
...
Рейтинг: 0 / 0
09.09.2010, 16:11
    #36838311
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
spПример: имеет 2 комбобокса с данными типа (к примеру) "Склады" и "Товары"
бизнес логика говорит что в итоге я должен выбрать только товар, находящийся на данном складе и вот тут возникает проблема

Никакой проблемы тут не возникает.
В связке Model-View-ViewModel бизнес-логика реализуется в слое Model (оно же DomainModel, оно же модель предметной области). ViewModel, и уж тем более View - никакого отношения к бизнес-логике не имеют.

Есть объект Товар, есть объект Склад, у каждого Склада есть св-во, возвращающее набор Товаров, находящихся на данном Складе. А дальше уже где надо, там и используешь. В том числе и в других местах DomainModel (например для реализации правила "я должен выбрать только товар, находящийся на данном складе" при формирования какого-либо составного объекта), и во ViewModel.
...
Рейтинг: 0 / 0
09.09.2010, 16:16
    #36838319
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
ЛПspПример: имеет 2 комбобокса с данными типа (к примеру) "Склады" и "Товары"
бизнес логика говорит что в итоге я должен выбрать только товар, находящийся на данном складе и вот тут возникает проблема

Никакой проблемы тут не возникает.
В связке Model-View-ViewModel бизнес-логика реализуется в слое Model (оно же DomainModel, оно же модель предметной области). ViewModel, и уж тем более View - никакого отношения к бизнес-логике не имеют.

Есть объект Товар, есть объект Склад, у каждого Склада есть св-во, возвращающее набор Товаров, находящихся на данном Складе. А дальше уже где надо, там и используешь. В том числе и в других местах DomainModel (например для реализации правила "я должен выбрать только товар, находящийся на данном складе" при формирования какого-либо составного объекта), и во ViewModel.

но самое главное то я забыл Вам сказать - шо редактируем то мы накладную )))))
это шо за каждым чихов лице я должен пройти 2 слоя чтобы чтото изменить!!?? это же абсурд - получаецца модель ответственна за лицо!!??
...
Рейтинг: 0 / 0
09.09.2010, 16:26
    #36838365
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
2 sp
но самое главное то я забыл Вам сказать - шо редактируем то мы накладную )))))
Ну и редактируйте накладную. Именно её я имел в виду во фразе "при формирования какого-либо составного объекта"
Есть объект Накладная. У него есть св-во Склад (с которого идёт отгрузка). Есть у Накладной список отгружаемых товаров. Вот при изменении этого списка и проверяйте правило "данный товар есть на данном складе". Товар присутствует в Склад.ТоварыВНаличии - ок, не присутствует - эксепшен вверх.
Так же можете проверять правила "есть ли данный товар в нужном количестве", "не зарезервирован ли он", и прочие правила бизнес-логики.
Всё на уровне DomainModel.

это шо за каждым чихов лице я должен пройти 2 слоя чтобы чтото изменить!!??
Да хоть десять.

это же абсурд - получаецца модель ответственна за лицо!!??
Абсурд - это когда лицо ответственно за бизнес-логику. И когда модель лица ответственна за бизнес-логику - тоже абсурд.
...
Рейтинг: 0 / 0
09.09.2010, 16:28
    #36838371
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
ЛП
Есть объект Товар, есть объект Склад, у каждого Склада есть св-во, возвращающее набор Товаров, находящихся на данном Складе. А дальше уже где надо, там и используешь. В том числе и в других местах DomainModel (например для реализации правила "я должен выбрать только товар, находящийся на данном складе" при формирования какого-либо составного объекта), и во ViewModel.

и не сильно ли это накладно будет по части ресурсов бегать каждый раз за товарами в модель или даже на сервер, когда лицо само может эффективнее это выполнить!?
...
Рейтинг: 0 / 0
09.09.2010, 16:30
    #36838380
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
ЛП
Абсурд - это когда лицо ответственно за бизнес-логику. И когда модель лица ответственна за бизнес-логику - тоже абсурд.

Я вообщето имел в виду лишь отчасти проверку правил а в большей действия в интерлице!!!
...
Рейтинг: 0 / 0
09.09.2010, 16:31
    #36838386
JohnSparrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
Никакого гемора в формировании в модели представления списка товаров в зависимости от изменения выбранного склада.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
/////////////////////////////////////////////////////////
// модель данных
public class BaseEntity
{
	decimal ID { get; set; }
	string Name { get; set; }

	public override string ToString()
	{
		return string.Format("{0} ({1})", Name, ID);
	}
}

public class Storage : BaseEntity	// склад
{

}

public class Product : BaseEntity	// товар
{
	// склад, на котором находится данный товар
	Storage Storage { get; set; }
}

///////////////////////////////////////////////////////////
// модель представления
public class ViewModel : INotifyPropertyChanged
{
	// реализация INotifyPropertyChanged
	...

	// список доступных складов
	public List<Storage> Storages { get; }

	// текущий выбранный склад
	private Storage _selectedStorage;
	public Storage SelectedStorage
	{
		get
		{
			return _selectedStorage;
		}
		set
		{
			_selectedStorage = value;
			
			OnPropertyChanged("SelectedStorage");
			
			// т.к. товары зависят от склада, то известим клиентов об 
			// обновлении списка товаров
			OnPropertyChanged("Products");
			// и очистим выбранный товар
			SelectedProduct = null;
		}
	}

	// список доступных товаров (зависит от выбранного склада)
	public List<Product> Products
	{
		get
		{
			// выборка списка товаров из к.-л. источника в зависимости от выбранного склада
			// например - запрос LINQ (вероятно с ошибками, редко пользуюсь)
			List<Product> products = 
				(from p 
				in FullProducts 
				where p.Storage == SelectedStorage 
				select p).ToList<Product>();
		}
	}

	// текущий выбранный товар
	private Product _selectedProduct;
	public Product SelectedProduct
	{
		get
		{
			return _selectedProduct;
		}
		set
		{
			_selectedProduct = value;
			
			OnPropertyChanged("SelectedProduct");
			
			// т.к. товары зависят от склада, то известим клиентов об 
			// обновлении списка товаров
			OnPropertyChanged("Products");
			// и очистим выбранный товар
			SelectedProduct = null;
		}
	}
}
XAML представления
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<ComboBox Name="ComboStorages" 
		  ItemsSource="{Binding Path=Storages, UpdateSourceTrigger=PropertyChanged}" 
		  SelectedItem="{Binding Path=SelectedStorage, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

<ComboBox Name="ComboProducts" 
		  ItemsSource="{Binding Path=Products, UpdateSourceTrigger=PropertyChanged}" 
		  SelectedItem="{Binding Path=SelectedProduct, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
...
Рейтинг: 0 / 0
09.09.2010, 16:34
    #36838395
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
spи не сильно ли это накладно будет по части ресурсов бегать каждый раз за товарами в модель или даже на сервер, когда лицо само может эффективнее это выполнить!?
Кто сказал, что оно куда-то бегать должно, на какой-то там сервер?
Не путайте Layer и Tier
Хотите - кэшируйте информацию локально, с ней и работайте. Не хотите - флаг в руки, на каждый чих дёргайте сервак. Хотите - службу нотификейшенов прикрутите сбоку, для обеспечения обновления локально закэшированных данных. К MVVM оно вообще никак не относится.

Я вообщето имел в виду лишь отчасти проверку правил а в большей действия в интерлице!!!
Тогда и не говорите про бизнес-логику.
Не знаете значение слова - не употребляйте его.
Авось за умного сойдёте.
...
Рейтинг: 0 / 0
09.09.2010, 16:34
    #36838400
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
да и это всеголишь один вопрос - а вот примеру действия "тут мы читаем, тут не читаем тут рыбу заворачивали" - это же дествия исключительно с лицом - что модель должна и этим занимацца , а ViewModel тогда что тут делает?? если разбоки идут только между моделью и лицом???
...
Рейтинг: 0 / 0
09.09.2010, 16:36
    #36838409
JohnSparrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
В примере кода во ViewModel.SelectedProduct.Set() все, что после строки "OnPropertyChanged("SelectedProduct");", лишнее: свойство SelectedProduct получено механическим копированием SelectedStorage, прохлопал удалить лишнее.
...
Рейтинг: 0 / 0
09.09.2010, 16:36
    #36838410
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
ЛП
Я вообщето имел в виду лишь отчасти проверку правил а в большей действия в интерлице!!!
Тогда и не говорите про бизнес-логику.
Не знаете значение слова - не употребляйте его.
Авось за умного сойдёте.

Простите, но я вынужден тоже самое сказать и в ваш адрес - по вашему изменения в лице сцелью ударить юзера по рукам - это не бизнес логика!!?? вам тогда на 1й курс срочно надо!!
...
Рейтинг: 0 / 0
09.09.2010, 16:37
    #36838418
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
spПростите, но я вынужден тоже самое сказать и в ваш адрес - по вашему изменения в лице сцелью ударить юзера по рукам - это не бизнес логика!!?? вам тогда на 1й курс срочно надо!!
Простите, вы дурак?
Чисто с медицинской точки зрения?
...
Рейтинг: 0 / 0
09.09.2010, 16:39
    #36838423
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
spда и это всеголишь один вопрос - а вот примеру действия "тут мы читаем, тут не читаем тут рыбу заворачивали" - это же дествия исключительно с лицом - что модель должна и этим занимацца , а ViewModel тогда что тут делает?? если разбоки идут только между моделью и лицом???

тьфу очепятался - вопрос был про view - нафига тада казе баян!?)
...
Рейтинг: 0 / 0
09.09.2010, 16:41
    #36838432
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
простите, глупостями не занимаемся и на глупые вопросы не отвечаем! )
...
Рейтинг: 0 / 0
09.09.2010, 16:42
    #36838436
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
JohnSparrowВ примере кода во ViewModel.SelectedProduct.Set() все, что после строки "OnPropertyChanged("SelectedProduct");", лишнее: свойство SelectedProduct получено механическим копированием SelectedStorage, прохлопал удалить лишнее.

Большое спасибо за пример! снял некоторую часть вопросов! )
...
Рейтинг: 0 / 0
09.09.2010, 16:42
    #36838441
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
P.S. Вопросы "сцелью ударить юзера по рукам" - это вообще авторизация и аутентификация. Сквозная функциональность по всем слоям. Почитайте уже книжки какие-нибудь.
...
Рейтинг: 0 / 0
09.09.2010, 16:55
    #36838481
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
ЛПP.S. Вопросы "сцелью ударить юзера по рукам" - это вообще авторизация и аутентификация. Сквозная функциональность по всем слоям. Почитайте уже книжки какие-нибудь.

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

Пива нет, пива нет - Нет чтоб написа просто "Пива нет" - не хотел вас обидеть )
...
Рейтинг: 0 / 0
09.09.2010, 16:55
    #36838483
JohnSparrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
sp
Большое спасибо за пример! снял некоторую часть вопросов! )
Не за что. А какие вопросы не снял?
...
Рейтинг: 0 / 0
09.09.2010, 17:08
    #36838531
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
JohnSparrowsp
Большое спасибо за пример! снял некоторую часть вопросов! )
Не за что. А какие вопросы не снял?

Спасибо за помощь!
щас переосмыслю все что было ранее в плане того что Вы показали и апосля сформулирую что осталось непонятым ))
...
Рейтинг: 0 / 0
09.09.2010, 19:48
    #36838835
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
ага, ну вот другой вопрос:
часто бывает что в зависимости од значения одного поля в интерфейсе толи дизейблицца. толти прячется часть интерфейса, менюй и т.д. (т.е. некоторое бизнес-правило говорящее что если поле такоето равно томуто - не заполнять такието поля и т.д.) - где эта функциональность реализовывать?
...
Рейтинг: 0 / 0
09.09.2010, 22:02
    #36838975
Var79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
либо в xaml либо в xaml.cs, либо на стороне клиента (вью) сделать класс хелпер
...
Рейтинг: 0 / 0
09.09.2010, 22:03
    #36838976
Var79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM и куча вопросов
но в домэйн-модель тоже проверять коректность
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM и куча вопросов / 25 сообщений из 62, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]