2009-05-31 4 views
1

Я хотел бы экспериментально применить аспект инкапсуляции, который я прочитал примерно один раз, когда объект-объект включает домены для своих атрибутов, например. для своего свойства CostCentre он содержит список действительных МВЗ. Таким образом, когда я открываю форму редактирования для расширения, мне нужно передать только один объект Extension, где я обычно обращаюсь к объекту CostCentre при инициализации формы.Entity Framework и инкапсуляция

Это также относится к тому, где у меня есть список расширений, связанных с сеткой (telerik RadGrid), и я обрабатываю команду редактирования в сетке. Я хочу создать форму редактирования и передать ей объект Extension, где теперь я передаю форму редактирования ExtensionID и создаю свой объект в форме.

То, что я на самом деле прошу здесь, - это указать указателям на то, как это делается, или «правильный» способ достижения чего-то подобного тому, что я здесь описал.

ответ

2

Это будет зависеть от вашего источника данных. Если вы извлекаете список МВЗ из базы данных, это будет один из подходов. Если это короткий список предопределенных значений (например, Yes/No/Maybe So), атрибуты свойств могут сделать трюк. Если для каждой среды требуется более настраиваемая конфигурация, то лучшим вариантом будет IoC или шаблон провайдера.

Я думаю, что ваша проблема аналогична специальной странице поиска ad-hoc, которую мы сделали в предыдущем проекте. Мы украсили классы и свойства сущностей с атрибутами, которые содержали некоторые предопределенные «указатели» методам значения lookup и их отношения. Затем мы создали единый пользовательский интерфейс пользовательского интерфейса (например, вашу страницу редактирования, описанную в вашем сообщении), которая использовала эти атрибуты для генерации списков выпадающего списка и автоматического заполнения, динамически генерируя выражение LINQ, а затем выполняла его во время выполнения на основе независимо от того, что делает пользователь.

Это было выполнено в основном тремя движущимися частями: A) атрибутами объектов доступа к данным; B) методами «атрибутного фасада» при компиляции и генерации динамических выражений LINQ среднего уровня и C) пользовательским элементом управления пользовательским интерфейсом, который вызывал наши методы обслуживания среднего уровня.

Иногда такие планы, как эти обратные последствия, но в нашем случае это отлично работало. Украшая наши объекты атрибутами, то создание единого пути логики дало нам достаточно силы, чтобы делать то, что нам нужно было делать, сводя к минимуму количество требуемого кода и полностью устраняя любой шаблон. Однако этот подход не был очень настраиваемым. Компилируя эти атрибуты в код, мы тесно связали наше приложение с источником данных. В этом конкретном проекте это было неважно, потому что это была внутренняя система клиентов, и она соответствовала срокам проекта. Тем не менее, на «реальном продукте», реализующем логику с шаблоном провайдера, или с использованием чего-то вроде проектов Castle IoC, мы бы предоставили нам такую ​​же мощность с гораздо большей конфигурацией. Недостатком этого является то, что есть больше, чтобы справиться, и больше того, что может пойти не так с развертываниями и т. Д.