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