Мне нравится реализовать коллекцию (что-то вроде List<T>
), которая будет содержать все мои объекты, которые я создал за весь срок службы моего приложения, как будто его массив указателей в C++ , Идея заключается в том, что когда мой процесс начинается, я могу использовать центральную фабрику для создания всех объектов, а затем периодически проверять/аннулировать их состояние. В основном я хочу убедиться, что мой процесс касается только действительных экземпляров, и я не переучиваю информацию, которую я уже вытащил из базы данных. Таким образом, все мои объекты будут в основном находиться в одном месте - моей коллекции. Приятная вещь, которую я могу сделать с этим, - это избегать вызовов базы данных, чтобы получить данные из базы данных, если я уже получил ее (даже если я обновил ее после извлечения ее еще актуальной, если, конечно, какой-то другой процесс не обновил ее, это другая проблема). Я не хочу снова звонить new Customer("James Thomas");
, если я когда-нибудь входил в Джеймс Томас. В настоящее время я получаю несколько копий одного и того же объекта в приложенииdomain - некоторые из них синхронизируются в синхронизации, и хотя я занимаюсь этим, используя поле timestamp
на сервере MSSQL, я бы хотел оставить только одну копию на одного клиента в моей appdomain (если возможно, процесс будет лучше).C# справочная коллекция для хранения ссылочных типов
Я не могу использовать обычные коллекции, такие как List или ArrayList, например, потому что я не могу передавать параметры по их реальной локальной ссылке на их существующие методы Add(), где я их создаю, используя ref
, так что это нехорошо, я думаю , Итак, как это может быть реализовано/может ли оно быть реализовано вообще? Тип связанного списка со всеми методами, работающими с ref
& out
params - это то, что я сейчас думаю, но он может стать уродливым довольно быстро. Есть ли другой способ реализовать такую коллекцию, как RefList<T>.Add(ref T obj)
?
Итак, нижняя строка: я не хочу воссоздавать объект, если я уже создал его раньше всего срока службы, если только не решит его повторно создать (возможно, его устаревший или что-то, поэтому я должен снова извлечь его из db). Есть ли альтернативы?
Вы когда-нибудь слышали о контейнере Ioc? –
Что вы подразумеваете под «реальной местной ссылкой»? Вы недопонимаете и злоупотребляете 'ref' и' out', IMO. –
Добавление объектов в коллекцию фактически хранит ссылки на объект. Я не вижу, что проблема с использованием списка. Не могли бы вы объяснить немного больше. –