Коллекции как декораторы в C # - PullRequest
2 голосов
/ 28 июня 2010

Мы столкнулись с довольно «очевидной» проблемой при разработке инфраструктуры коллекций: предположим, вам нужно реализовать множество (под) типов коллекций.Одним из аспектов является связанный с хранилищем : список , массив и т. Д., В то время как другой связанный с поведением : упорядочен, удалить только , наблюдаемый (тот, который запускает событие при каждом изменении) и т. Д.

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

Было бы здорово узнать о чем-то подобном, которое уже было кем-то реализовано.Следовательно, если возможно - пожалуйста, порекомендуйте / обратитесь к любой хорошо поддерживаемой сторонней библиотеке, которая бы отвечала требованиям, указанным выше.

Спасибо, пока :))

1 Ответ

2 голосов
/ 28 июня 2010

Я думаю, вы что-то не так поняли:

Декораторы используются для изменения и добавления поведения в основном во время выполнения . Но свойства коллекций, которые вы цитировали, должны быть доступны во время компиляции . Декоратор совершенно не подходит для добавления дополнительных методов в существующий класс.

Хотя эти признаки коллекций можно разложить на интерфейсы (и это действительно было сделано 1) ), на самом деле это не то, чем занимается декоратор: декоратор оборачивает существующий класс, реализующий тот же интерфейс. Для коллекций наследование будет иметь больше смысла (или даже может потребоваться) вместо композиции.


1) Несколько лет я начал разрабатывать свою собственную такую ​​библиотеку, Containers.NET , но поскольку предварительные тесты показали, насколько быстрее нативная. NET-контейнеры были, хотя Containers.NET не добавлял никаких дополнительных затрат, я остановил проект, пока он не зашел очень далеко.

...