Перейти к основному содержимому

View Factories

Фабрики для создания и уничтожения View из префабов. Используются коллекционными биндерами.


IViewFactory<T>

Интерфейс фабрики:

public interface IViewFactory<T> where T : IView
{
T Create(IViewModel viewModel);
void Release(T view);
}

PrefabViewFactory

Создаёт View из префаба через Object.Instantiate. При Release — уничтожает объект.

Inspector-свойства

СвойствоОписание
_prefabПрефаб MonoView
_containerРодительский Transform для инстанцированных объектов
_overrideSiblingПереопределить порядок в иерархии
_siblingIndexИндекс при _overrideSibling = true

Принцип работы

  1. Create(viewModel)Instantiate(prefab, container)view.Initialize(viewModel)
  2. Release(view)view.DestroyViewAndGameObject()
// Из кода:
var factory = new PrefabViewFactory(itemPrefab, container);

// Или типизированный:
var factory = new PrefabViewFactory<ItemView>(itemPrefab, container);

PrefabViewPool

Наследует PrefabViewFactory, но использует ObjectPool<T> вместо создания/уничтожения.

Inspector-свойства

СвойствоОписание
_initialCountНачальный размер пула (pre-warm)
_maxCountМаксимальный размер пула

Принцип работы

  1. Create(viewModel) — берёт View из пула (или создаёт новый) → SetActive(true)Initialize(viewModel)
  2. Release(view)Deinitialize()SetActive(false) → возвращает в пул
// Из кода:
var pool = new PrefabViewPool(itemPrefab, container, new PoolSettings(initialCount: 10, maxCount: 100));

Преимущества над PrefabViewFactory

  • Нет аллокаций при повторном использовании
  • Нет вызовов Instantiate/Destroy
  • Подходит для списков с частым добавлением/удалением элементов

Использование с коллекционными биндерами

View Factories используются в ViewModelObservableListBinder и VirtualizedListItemSourceBinder:

// В Inspector:
// ViewModelObservableListBinder → ViewFactory → PrefabViewPool
// → Prefab: ItemView
// → Container: ScrollContent
// → Initial Count: 20

См. также