Хм, поэтому у меня были проблемы с названием, но это был мой лучший выстрел!
Ситуация: Я пишу библиотеку, так что я легко могу повторно использовать свой код в будущих проектах, не думая о внутренностях. Предполагается, что эта библиотека сможет создавать объекты во время выполнения и затем обращаться к ним для выполнения задач с помощью метода. Все с помощью простого в использовании идентификатора.
Примерно так:
class Manager
{
Object[] Foo;
// Other stuff + initialization logic
CreateFoo(/*Some parameters here + Identifier*/)
{
// Create a new Foo here;
}
AddBar(/*Moar parameters + Foo identifier*/)
{
Foo[StoID(identifier)].AddBar(/*Params*/);
}
}
class Software
{
Software()
{
// Create a lot of Foos.
while(1)
{
manager.CreateFoo(/*Params*/);
}
}
void OhHai()
{
// This method can be called a LOT (100 times per update) or not at all
// depending on circumstances.
manager.AddBar(/*Params*/);
}
}
Отказ от ответственности: Нет, на самом деле это НЕ мой глупый код!
Проблема: Возможно, я захочу получить доступ к моим объектам Foo, и производительность имеет решающее значение, так же как управляемость и простота использования. Например, моей первой мыслью было использование строк и индексов массивов для создания небольшой динамической библиотеки преобразования. Однако это будет означать много итераций - в зависимости от того, сколько Foos создано - и сравнение строк.
Пример: * ** 1022 тысячу двадцать одна *
class Software
{
Manager manager;
Software()
{
manager.CreateFoo("Lol", /*Parameters*/);
manager.CreateFoo("Cat", /*Parameters*/);
}
void OhHai()
{
manager.AddBar("Lol", /*Parameters 1*/;
manager.AddBar("Cat", /*Parameters 2*/;
}
}
Производительность прямого доступа к Foo с индексом должна быть намного выше, чем при первом преобразовании строки в id. Однако людьми легко управлять струнами, поэтому удобство использования было бы идеальным для этого.
То, что я спрашиваю: Как с этими вещами обычно справляются, и есть ли у кого-нибудь предложение, как мне это спроектировать?
Редактировать: По сути, я пытаюсь найти легкий способ для моего менеджера узнать, к какому Foo добавить бар! :)