Лучшая практика для цепочки методов («вернуть это»)

У меня есть абстрактный класс с именем DatabaseRow , который после создания и создания в основном загружается из Load (идентификатор объекта) метод

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

Есть два способа, которые я могу придумать для выполнения это, но ни то, ни другое не кажется мне «правильным».

1. Я мог бы вернуть это; в конце моего метода Load и использовать return new Derived (). Load (id);

2. Я мог бы создать общий метод для возврата загруженного метода.

public static T LoadRow<T>(object id) where T : DatabaseRow, new()
{
    T row = new T();
    row.Load(id);
    return row;
}

Я видел другой код, который использует тот же метод, что и номер 1 , но я никогда не видел, чтобы опытные разработчики рекомендовали это, и я не встречал никаких методов в платформе .NET, которые делают то же самое, так что, может быть, это не лучшая практика?

Кто-нибудь знает какие-либо другие решения, которые могли бы быть лучше, чем оба из них?

Решение:

Прочитав ответ и комментарий SirViver, я понял, что все возвращаемые свойства в любом случае необходимо кэшировать. Решение было несколько иным, но похоже на вариант 2 (что я не ожидал, что кто-то придумает такой ответ, как я » t объясните эту часть схемы)

Все эти экземпляры будут загружены из значения, полученного из другого столбца в базе данных (отношения базы данных, если хотите). Вместо того, чтобы пытаться загрузить новый экземпляр из этого значения, я создал метод для загрузки экземпляра из имени столбца и кеширования загруженного значения в Словаре. Это работает хорошо, так как это одна из основных функций класса DatabaseRow .

    private Dictionary<string, DatabaseRow> linkedRows;

    protected T GetLinkedRow<T>(string key) where T : DatabaseRow, new()
    {
        if (linkedRows.ContainsKey(key)) return (T)linkedRows[key];
        else
        {
            T row = new T();
            row.Load(this[key]);
            linkedRows.Add(key, row);
            return row;
        }
    }
8
задан Connell 9 November 2011 в 14:09
поделиться