AutoMapper жизнеспособная альтернатива двухсторонней привязке данных с использованием FormView? - PullRequest
1 голос
/ 18 марта 2010

Я начал использовать элемент управления FormView, чтобы включить двустороннюю привязку данных в веб-формах asp.net. Мне понравилось, что это избавило меня от необходимости писать процедуры loadForm и unloadForm на каждой странице. Так что с самого начала все работало хорошо, когда я просто использовал текстовые поля везде ... но когда пришло время начинать преобразовывать некоторые из них в DropDownLists, все терялось. Например, см .: Невозможно загрузить DropDownList в FormView из кода позади? .... и у меня было много дополнительных проблем после этого.

Итак, я наткнулся на статью об AutoMapper, о которой я пока что знаю очень мало, но, судя по звукам, эта может стать жизнеспособной альтернативой двусторонней привязке данных формы к объекту домена. объект? Насколько я понимаю, AutoMapper в основном работает по соглашению об именах, поэтому он будет искать свойства совпадающих имен (?) В объектах источника и назначения.

Итак, в основном, у меня есть все мои доменные сущности (то есть: Person) со свойствами (FirstName, LastName, Address и т. Д.) .... что я хотел бы сделать, это объявить свои элементы управления asp (текстовые поля, выпадающие списки и т. д.) с теми же именами, и их автоматический загрузчик и выгрузка.

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

(Да, конечно, если бы я использовал MVC, у меня не было бы этих проблем, я знаю).

Предупреждение 1 : AutoMapper должен знать правильное имя свойства для каждого элемента управления тип (сам элемент управления будет иметь тот же идентификатор, что и свойство в объект, но поведение будет зависеть от типа элемента управления), то есть:

Person.FirstName -> form.FirstName. .Text
Person.Country -> form.Country. Выбранное значение
Person.IsVerified -> form.IsVerified. Проверено

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

Предупреждение 2 : вложенные элементы управления - чтобы еще больше усложнить ситуацию, если один может передать веб-форму в AutoMapper (пока не знаю, можете ли вы), источник / назначение элементы управления не обязательно находятся в корне веб-формы, поэтому нужно было бы иметь возможность выполнять рекурсивный поиск всех дочерних элементов управления в переданной веб-форме (это легко), возвращая коллекцию всех допустимых экземпляров типов элементов пользовательского интерфейса.

Предостережение 3 : элементы пользовательского интерфейса элемента управления не являются общедоступными - при обходе иерархии вложенных элементов управления в # 2, если вы используете элементы управления пользователя, которые не предоставляют свои содержащиеся в них элементы публично (без жесткого кодирования, так ), нужно было бы выполнить FindControl для каждого элемента в текущей коллекции AutoMapper. Этот кажется потенциальным нарушителем ...
a) производительность может быть очень плохой (хотя, если пользовательский элемент управления найден, его можно передать в конец очереди и обработать только при необходимости)
б) как внутри отдельной функции карты можно получить ссылку на всех братьев и сестер текущего сопоставленного элемента в текущей функции сопоставления?

Есть идеи ??

Обновление

Из того, что я прочитал, похоже, что путь, по которому, вероятно, придется идти:

http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters&referringTitle=Home
http://msdn.microsoft.com/en-us/library/ayybcxe5%28VS.71%29.aspx

1 Ответ

3 голосов
/ 23 марта 2010

Я думаю, что вашим лучшим долгосрочным решением было бы проверить WebForms MVP - он обеспечивает лучший уровень абстракции по сравнению с WebForms, если вы не можете переключиться на среду MVC. Тогда вам будет намного проще сопоставлять время, а также получите преимущества шаблона MVP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...