|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
1. Атрибуты типов можно задать через статические свойства этих типов. 2. Атрибуты экземпляров можно задать через введение одного уровня иерархии для экземпляров - т. е. введение обёртки для каждого экземпляра в виде типа, который будет содержать в себе все атрибуты экземпляра в виде обычных полей. 3. Легкость установки значений атрибутов и приписываний этих атрибутов к сущностям с лихвой перекрывается трудностью и недуобностью получения этих значений и проблемами с байндингами. С обычными полями всё наоборот - довольно много писать кода, чтобы их установить (хотя, конструктор и в атрибутоах - тот же конструктор), зато с получением их значений и байндингами всё проще простого. 4. Изучение атрибутов - дополинтельные усилия. ООП же и статические данные в частности - как бы "из коробки". Я уже поднимал эту тему ни один раз. Вот, например, из-за введения атрибутов в модели у меня возникла куча проблем в модели представления и представлении (MVVM) - http://www.sql.ru/forum/actualthread.aspx?tid=1002838 . Пришлось просить народ помощи и никто ничего лучше не придумал, чем костыли. Если бы изначально модель была без атрибутов и чисто на вложенных объектах (да, даже инты и даблы прийдётся упаковывать в объект, если это не просто инты и даблы, а параметры с кучей своих свойств, а не просто своим значением) и статических свойствах. Можно предположить, что у меня был неправильный дизайн модели и надо было не в атрибутах всё делать, а во вложенных объектах и статических свойствах. ОК, но тогда зачем атрибуты? Ну, мне сказали, что метаданные - это свойства свойств. - У меня так и есть - свойства свойств. Атрибуты - способ выражения метаданных в C#. - ОК, выразил. Но зачем делать такой неудобный способ доступа к атрибутам - всякие GetCustomAttributes() и прочие проверки if(attr is MyCustomAttribute), вместо простого доступа, как к полям объектов - через точку. Не спорю, может, кто-то и пишет специальные обёртки или там перегрузки (хотя в C# операторы перегружать нельзя), или извращается с fluent-кодом, за которым стоят простыни с рефлексией и лямбда-выражениями, чтобы к атрибутам тоже можно было иметь простой доступ, как к полям, но почему этого нет "из коробки"? Почему каждый изобретает велосипед (как меня уверили в моей теме) и это считается нормальным? Может, атрибуты где-то имеют применение где-то ещё, кроме как более удобного чтения "а что же это там ещё за данные связаны вот с этим типом и этим int'ом?"? Может, я вообще не понимаю, зачем нужны атрибуты и в них есть какой-то скрытый смысл, кроме как "данные о данных"? Но для меня пока атрибуты только больше проблем создают, чем пользы: я потратил время на их изучение, я повёлся на модную штуку и ввёл её в свою модель, а когда пришла пора выводить значения в интерфейс, то я сел в лужу и вынужден либо придумывать костыли, либо переписывать модель. При этом не факт, что костыли придумаются быстрее переписывания модели. Как дополнение - вопрос: лучше использовать атрибуты и париться с их доставанием в дальнейшем, или сразу сделать всё на вложенных объектах и статических полях? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 10:33 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
И да, рефлексия, где к сущности надо обращаться через написание имени этой сущности в строке, вместо привычной точки с подсказками из Интеллисенс - это выглядит как каменный век даже, а не вчерашний день. Это же пипец просто - GetProperty(string propertyName), вместо MyClass.MyProppertyProperty (первое "Property" входит в имя). Потом всякие гуру пишут, как упростить себе жизнь при рефакторинге, введя всякие проверки на существование свойства и прочие костыли. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 10:39 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Тут следует ещё сказать, что синтаксический сахар призван как бы упрощать жизнь, подслащать её, а атрибуты при использовании в том виде, что я описал, скорее больше проблем созщают. А другого способа использования атрибутов я и не знаю - может, кто-нибудь подскажет? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 10:42 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
user7320, гугли AOP, PostSharp и т. п.. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 12:13 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Lord British, Спасибо, посмотрю. Я пока единственную причину применения атрибутам вижу - в C# нет такого типа, который бы был неизвестно каким (любым) до инициализации, и становился конкретным - после. Т. е. в вышеупомянутой мной обёртке для простого типа (инт, дабл и пр.), содержащей все атрибутинвые данные значения этого типа в виде обычных полей, само значение должно быть неопределённого типа до его инициализации. После инициализации оно должно стать интом, даблом, ссылочным типом - каким нужно, вобщем. Тогда бы проблем не было. А так либо обёртку для каждого простого типа надо делать, плюс вариант для ссылочного, либо вот атрибуты использовать со всеми их костылями при доступе к их значениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 12:44 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Lord British, Не понял, а как мне поможет аспектно-ориентированное программирование, когда я говорю об организации данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 13:11 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Меня, в принципе, всё устраивает. Меня только не устраивает муторный способ доступа к данным атрибутов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 13:13 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
user7320, я не читал ваши сообщения. увидел обьем - понял что не устраивает что-то. и ответил на вопрос в названии "Атрибуты - синтаксический сахар?" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 18:39 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
user7320, в C# нет метапрограммирования. Точка. Может помочь уже упомянутое AOP. Но муторно. Я попробовал прикинуть, можно ли с помощью кодогенерации (T4) нагенерировать автоматически свойства (чтобы обращаться через точечную нотацию к атрибутам), но вряд ли она на это способна. Для этого нужно именно метапрограммирование, как в языках Nemerle и Boo. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 18:49 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
petalvikuser7320, в C# нет метапрограммирования. Точка. Может помочь уже упомянутое AOP. Но муторно. Я попробовал прикинуть, можно ли с помощью кодогенерации (T4) нагенерировать автоматически свойства (чтобы обращаться через точечную нотацию к атрибутам), но вряд ли она на это способна. Для этого нужно именно метапрограммирование, как в языках Nemerle и Boo. Т. е. имея вот это Код: c# 1. 2. 3. 4. 5. 6.
Сделать вот так (нагенерировав коллекций MyClass.Attributes и MyClass.Properties со свойствами с именами, совпадающими с именами атрибутов и свойств) Код: c# 1. 2. 3. 4. 5. 6.
настолько трудно, что не стоит браться на C#? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 19:46 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
user7320настолько трудно, что не стоит браться на C#? Когда берешься за новый язык, то следует смотреть, что уже есть готовое и не изобретать свои лисапеды без знания основ. Локализация и валидация делаются отдельно без этих мультиков на ровном месте ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 21:32 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
user7320 настолько трудно, что не стоит браться на C#? Так? Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 21:47 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Често признаться, проще такой записи сделать не удалось Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
С поддержкой аттрибутов и классов и пропертей Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 22:37 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
fixed теперь интеллисенс понимает, выкинул dynamic, поддерживает атрибуты методов и т. п.. Код: sql 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. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2013, 23:22 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Lord British, респект!!! user7320, респект за упорство, заставившее участников поупражнять мозги ))) но, повторюсь, imho, для Вашей задачи просто не следует использовать атрибуты ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 01:20 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Lord British, спасибо за ваш код - я и в этой, и в другой теме попозже посмотрю. Сейчас мне немного некогда - надо сдать хоть что-то, чтобы работало, поэтому я остановился пока на словаре и индексируемых свойствах, как LR подсказал. Потом, возможно, переделаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 05:30 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
А вот откуда у меня взялись атрибуты http://www.sql.ru/forum/actualthread.aspx?tid=998647 . Мне там посоветовали их использовать. И вообще, почему вы советуете не использовать, а в ASP.NET MVC их использует с той же целью, как и я у себя? В команде MVC же тоже знают, что можно использовать просто иерархию классов - почему не делают этого? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 05:35 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
user7320А вот откуда у меня взялись атрибуты http://www.sql.ru/forum/actualthread.aspx?tid=998647 . Мне там посоветовали их использовать. И вообще, почему вы советуете не использовать, а в ASP.NET MVC их использует с той же целью, как и я у себя? В команде MVC же тоже знают, что можно использовать просто иерархию классов - почему не делают этого? Одним нужна "иерархия классов", другим нужно определять DisplayName по количеству звёзд на луне, третим - по наличию голубей в сумке почальона. Мысль понятна? Всегда есть возможность создать кастомный атрибут и формировать его значение по своим алгоритмам. Или можно вообще отказаться от атрибутов и формировать значение в представлении на основе своих алгоритмов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 09:46 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
МСУИли можно вообще отказаться от атрибутов и формировать значение в представлении на основе своих алгоритмов.Или тупо писать "это" в XAML. Собственно, XAML для того и есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 09:51 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
user7320petalvikuser7320, в C# нет метапрограммирования. Точка. Может помочь уже упомянутое AOP. Но муторно. Я попробовал прикинуть, можно ли с помощью кодогенерации (T4) нагенерировать автоматически свойства (чтобы обращаться через точечную нотацию к атрибутам), но вряд ли она на это способна. Для этого нужно именно метапрограммирование, как в языках Nemerle и Boo. Т. е. имея вот это Код: c# 1. 2. 3. 4. 5. 6.
Сделать вот так (нагенерировав коллекций MyClass.Attributes и MyClass.Properties со свойствами с именами, совпадающими с именами атрибутов и свойств) Код: c# 1. 2. 3. 4. 5. 6.
настолько трудно, что не стоит браться на C#? В XAF от DevExpress такая же хрень. Там вроде как ORM продвигается. Тоже вот сижу мучаюсь. Хотя всё на основе того же C#. С опытом всё придёт, я надеюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 10:02 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Но если сильно хочется, что мешает написать расширение разметки для XAML, вытягивающее из указанного типа/свойства/атрибута нужное значение? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 10:05 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Алексей КМСУИли можно вообще отказаться от атрибутов и формировать значение в представлении на основе своих алгоритмов.Или тупо писать "это" в XAML. Собственно, XAML для того и есть. Практически все так и делают :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 10:30 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Или тупо писать "это" в XAML. Собственно, XAML для того и есть. Практически все так и делают :)Неожиданно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 10:47 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
Алексей КНеожиданно. Спалилсо... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 11:07 |
|
Атрибуты - синтаксический сахар?
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Или тупо писать "это" в XAML. Собственно, XAML для того и есть. Практически все так и делают :) Ну и как вы будете локализованные значения вписывать руками в замл? Я же не просто так. Тем более, что раз у меня в модели есть данные - зачем мне их дублировать руками в замле? А если я в модели чего поменяю - мне в замле искать где и чего я поменял? Короче, мне ли вам рассказывать, что так делать не нужно. Алексей КНо если сильно хочется, что мешает написать расширение разметки для XAML, вытягивающее из указанного типа/свойства/атрибута нужное значение? Мешает то, что просто не знал про такую возможность. Вообще, много можно чего написать, а я пока попробовал только два-три способа. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:54 |
|
|
start [/forum/topic.php?fid=20&msg=38145567&tid=1405194]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 188ms |
0 / 0 |