Должны ли вы вернуть перевязку с бизнес -уровня (или сервисного уровня, доменной модели и т. Д.)?

StackOverflow https://stackoverflow.com/questions/4683593

Вопрос

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

Какой «правильный» способ сделать это? Должен ли я возвращать илиста, а затем копировать его в связывание связывания в целях презентации? С точки зрения реального мира, стоит ли эта накладная головка?

Это было полезно?

Решение

Я думаю, что доменная слой вернет более общие типы и уведомляет ли они (ObservableCollection<>) или нет (IEnumerable<> или же IList<>) соответствует требованиям.

Уровень пользовательского интерфейса может иметь дело с их трансформированием, как они хотят (или нет) в iBindingList, если им нужна эта функциональность.

Мы использовали BindableLinq к большому успеху для достижения целей уведомления/синхронизированного списка связывания (возможно, с фильтрами) на уровне пользовательского интерфейса.

Другие советы

Там нет копирования илиста (по крайней мере, я надеюсь, что вы действительно не хотите создавать копию/клон). Все, что вы обычно делаете, это создаете еще одну ссылку на один и тот же объект ILIST. Таким образом, возвращение илистского объекта - нет ничего плохого.

Вы можете вернуть, например, объект списка и обратиться к нему из списка для привязки (который находится в вашем пользовательском интерфейсе).

По моему мнению, лучше вернуть объект ILIST (List, Hashtable ASO), чем привязый список, поскольку вы можете использовать первый в разных интерфейсах (консоль, сеть, победа, сервис). Например, использование связующего списка не будет иметь никакого преимущества в веб -приложении.

Я не знаю, что такое «правильный» способ, но я использовал рамки, такие как CSLA в прошлом, и я знаю, что он использовал связывание связывания, а теперь и наблюдение за списками бизнеса. Это сделало с использованием бизнес -объектов в пользовательском интерфейсе очень простым, поскольку пользовательский интерфейс обновляется, когда элементы были добавлены или удалены из списков. Если вы вернете ILIST, а затем скопируете его в привязку, вам необходимо вручную отслеживать и обрабатывать изменения в ILIST и перевести их в переплет. Мое личное предпочтение состоит в том, чтобы иметь богатый бизнес -слой, когда это было возможно, который будет использовать перевязанный список или наблюдение, чтобы представить бизнес -уровень в пользовательский интерфейс.

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

В любое время, когда вы делаете что -то вроде new BindingList<MyWidget>( list ) Вы отделяете привязку из корневого списка. Если предмет отредактирован, все будет работать нормально, но дополнения и удаления не будут отражены в исходном списке.

Я недавно попытался реализовать что -то подобное, вступив в SintingList ListChanged Событие, которое обновило мою модель, чтобы отразить изменения связывания списка, но если модель была изменена контроллером, она не обновляла список привязки в пользовательском интерфейсе.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top