|
Универсальный setter
|
|||
---|---|---|---|
#18+
Алексей К, ну в данном случае expression вряд ли будет быстрее рефлекшена. Если собрать через него выражение аналогичное рефлекшену и закешировать тогда да. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 12:56 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
bazileuser7320а зачем дебажить? Всё же на юнит-тестах делается. Тупо меняешь код, пока тесты не начнут проходить. Дебажить даже не надо. У тебя какое-то наивное представление о процессе разработки. Даже если код на 100% покрыт юнит-тестами, то все равно без отладки не получится обойтись. Не говорят уже о том что 100% покрытие встречается не так часто. А сами тесты надо дебажить? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 12:57 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
Алексей К, а переписать свою библиотеку через CallerMemberName пробовали? Может, там всё ужмётся в разы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 12:58 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
netivanАлексей К, ну в данном случае expression вряд ли будет быстрее рефлекшена. Если собрать через него выражение аналогичное рефлекшену и закешировать тогда да.Ну я и предложил с оговоркой, что если производительность позволяет. А она скорее всего позволяет, это же отображение данных, их при отображении обычно много не бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 12:59 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320Алексей К, а переписать свою библиотеку через CallerMemberName пробовали? Может, там всё ужмётся в разы.Если честно, первый раз его вижу. Тут надо подумать. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 13:01 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320Алексей К, а переписать свою библиотеку через CallerMemberName пробовали? Может, там всё ужмётся в разы.Оно под 4.5, а мне под 4.0 надо. :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 13:03 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
Алексей КnetivanАлексей К, ну в данном случае expression вряд ли будет быстрее рефлекшена. Если собрать через него выражение аналогичное рефлекшену и закешировать тогда да.Ну я и предложил с оговоркой, что если производительность позволяет. А она скорее всего позволяет, это же отображение данных, их при отображении обычно много не бывает. ну понятно, хотя вдруг обновление грида 1 млн в секунду, вот там будет заметно. Да и вообще можно и string передавать, ничего криминального не вижу тут.Раздули из такой фигни целую тему) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 13:05 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
netivanну понятно, хотя вдруг обновление грида 1 млн в секунду, вот там будет заметно.Уверен, там тонкое место будет в другом месте. :-) netivanДа и вообще можно и string передавать, ничего криминального не вижу тут.Если будет ошибка в имени свойства - её будет непросто отловить. С Expression как-то спокойнее. :-) netivanРаздули из такой фигни целую тему)Я узнал про CallerMemberName, значит не зря. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 13:14 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320Алексей К, а переписать свою библиотеку через CallerMemberName пробовали? Может, там всё ужмётся в разы. Вряд ли в разы - это решение решает только проблему вызова PropertyChanged, backing fields и логика оповещения зависимостей будет всё так же присутствовать. Решение по ссылке, которую я постил на предыдущей странице, действительно ощутимо сжимает код (базовый класс модели получился достаточно объемным). Единственное "но" этого решения - строчные именования свойств в атрибуте описания зависимости, но это решается рантаймовой проверко в конструкторе. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 15:13 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
bazileчто нужно тестировать, а что нет. Ну это вообще я поприкалывался раз - на заседации. Купили "Ковертюру" - это для джавы такая утилита, которая как раз замеряет покрытие юнит-тестами. (этож еще деньги на этом зарабатывают!!! ) И она дает 25%. Полно кода, где юнит тестить просто нечего. То есть, абсолютно. А обсуждался вопрос, как пометить едиообразно те методы, которая Кю вертюра брать в рассчет не должна. А я им рассказал случай, из геологической практики моих родителей - Когда некий руководитель получил от буровиков соц. обязательства - обеспечить выход керна 78%. Начал возмущаться - как это 78%!!! Вся страна берет повышенные обязательства - 106% , даже 110%!!! А вы только 78!!!! Не менее 103 должно быть! Я им и сказал - что не надо насиловать инструмент, то, что данный тип аппликации покрыт на 25% - это научный факт. Норма. Изменится тип проэкта - изменится и цифра. Незачем вносить в код то, что не код. :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 16:44 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
D129bazileчто нужно тестировать, а что нет. Ну это вообще я поприкалывался раз - на заседации. Купили "Ковертюру" - это для джавы такая утилита, которая как раз замеряет покрытие юнит-тестами. (этож еще деньги на этом зарабатывают!!! ) И она дает 25%. Полно кода, где юнит тестить просто нечего. То есть, абсолютно. А обсуждался вопрос, как пометить едиообразно те методы, которая Кю вертюра брать в рассчет не должна. А я им рассказал случай, из геологической практики моих родителей - Когда некий руководитель получил от буровиков соц. обязательства - обеспечить выход керна 78%. Начал возмущаться - как это 78%!!! Вся страна берет повышенные обязательства - 106% , даже 110%!!! А вы только 78!!!! Не менее 103 должно быть! Я им и сказал - что не надо насиловать инструмент, то, что данный тип аппликации покрыт на 25% - это научный факт. Норма. Изменится тип проэкта - изменится и цифра. Незачем вносить в код то, что не код. :-))) Ваши проблемы от того, что у ваших заказчиков до... денег. Вот и беситесь с жиру, выкидываете бабки на всякие утилиты, и без которых ясно, что к чему... С другой стороны, всяким кувертюрам тоже жить надо - у них свои семьи, дети. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 16:53 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320всяким кувертюрам тоже жить надо - у них свои семьи, дети. Вопрос только в том, когда падет Рим. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 17:04 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320Дело опять касается boilerplate реализаций INotifyPropertyChanged и свойств. Как вам такое решение (нашёл в Интернете)? Какие плюсы и минусы вы видите? Есть вообще смысл так делать - "униваресальные свойства" и т. п.? Тут, значит, штука в том, что есть универсальный сеттер и эта новая штука - атрибут CallerMemberName. Плюс в том, что нет жёстко заданных строк в имени propertyName, нет медленной рефлексии, нет выражений - всё это требовалось в разных реализациях, уводящих от жёстко заданных строк. Если только реализация CallerMemberName сама по себе не медленная, то всё вообще замечательно. Код: c# 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.
Ну вот и первый камушек... Значит, в MVVM, если мы используем модель как поле, хранящее значение свойств модели представления (т. е. в самой модели представления отдельных полей для хранения значений свойств нет), то так, как я выше написал в сеттере, сделать нельзя. Т. е. если имеем Код: c# 1. 2. 3. 4.
То вот так сделать нельзя Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Т. к. получим исключение "A property, indexer or dynamic member access may not be passed as an out or ref parameter". А получится сделать вот так Код: c# 1. 2. 3. 4. 5. 6.
Кто-нибудь может подсказать, как обойти это? Или как реализацию SetProperty поменять, чтобы и для таких случаев срабатывало? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 14:20 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 14:40 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320 Кто-нибудь может подсказать, как обойти это? Или как реализацию SetProperty поменять, чтобы и для таких случаев срабатывало? Код: c# 1. 2. 3. 4. 5. 6. 7.
:-)))))))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 14:43 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
D129user7320Кто-нибудь может подсказать, как обойти это? Или как реализацию SetProperty поменять, чтобы и для таких случаев срабатывало? Код: c# 1. 2. 3. 4. 5. 6. 7.
:-))))))))))))Нет! В этом случае с программой разберётся любой посторонний. Нам это не надо! :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 14:46 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
D129user7320Кто-нибудь может подсказать, как обойти это? Или как реализацию SetProperty поменять, чтобы и для таких случаев срабатывало? Код: c# 1. 2. 3. 4. 5. 6. 7.
:-)))))))))))) А где тут присвоение значения? Алексей К Код: c# 1. 2. 3. 4.
А выполнение? Что-то типа такого? Код: c# 1. 2. 3. 4. 5.
А как такую проверку сделать? Код: c# 1. 2. 3. 4.
Не пойму, как вытащить field из тела выражения. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 16:51 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
Т.е., там можно даже без выражения - сразу делегат. Но всё равно не понятно, как сделать проверку старого и нового значения поля. Разве что ещё один параметр ввести - старое значение поля - и делать сравнение в SetProperty - если не равны, то выполнять делегат, а если равны, то не выполнять? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 16:54 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320У тебя от экспешенов уже крыша поехала. :-) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 17:00 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320и делать сравнение в SetProperty - если не равны, то выполнять делегат, а если равны, то не выполнять? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И вот реализация (!!!) NotifyPropertyChanged: Код: c# 1. 2. 3. 4. 5. 6. 7.
Транспортное средство двухколесное изобретать будем? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 17:01 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
user7320Напиши уже T4 Template какой-нибудь или кодогенератор для XML. Там работы на 20 минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 17:08 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
Или вообще вот так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Тут пример реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 17:17 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
Если надо работать с инкапсулированной моделью оно будет выглядеть так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 17:20 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
D129user7320и делать сравнение в SetProperty - если не равны, то выполнять делегат, а если равны, то не выполнять? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И вот реализация (!!!) NotifyPropertyChanged: Код: c# 1. 2. 3. 4. 5. 6. 7.
Транспортное средство двухколесное изобретать будем? :-) У вас всё стандартно. А у меня - инкапсулировано в базовом классе. Мне надо только унаследоваться от этого базового класса и в нужном виде (см. мой ответ Алексею ниже) писать сеттер. Кстати, NotifyPropertyChanged - лучше через временную переменную : Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Алексей Кuser7320У тебя от экспешенов уже крыша поехала. :-) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Спасибо. Сеттер, конечно, чего-то разросся: Код: c# 1.
Надеюсь, больше косяков не всплывёт, а то, если ещё придётся сеттер усложнять, то придётся, наверное, бросить эту затею с универсальным сеттером. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 17:25 |
|
Универсальный setter
|
|||
---|---|---|---|
#18+
Алексей КИли вообще вот так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Тут пример реализации. Пока что моё своёство с двумя лямбдами выглядит приятнее. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2014, 17:28 |
|
|
start [/forum/topic.php?fid=20&msg=38531718&tid=1403365]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
98ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 319ms |
total: | 533ms |
0 / 0 |