Лучшее использование методов или свойств, что отличается? - PullRequest
0 голосов
/ 26 ноября 2009

Я довольно новичок в ООП, но должен разработать большой проект ... Только для воображения, ниже 2 примера, которые возвращают то же самое.

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

Спасибо.

public class House
{
    public static DataSet Windows
    {
        // just for imaging 
        get
        {
            DataSet ds = new DataSet(); // Here would be my data set from sql which returns a windows collection.
            return ds;
        }
        set
        {
            Windows = value;
        }
    }
    public static DataSet GetWindows()
    {
        DataSet ds = new DataSet(); // Gets same right?
        return ds;
    }
}

Ответы [ 3 ]

6 голосов
/ 26 ноября 2009

Свойства в C # преобразуются в методы get / set, поэтому технически они эквивалентны. Однако в руководящих принципах структуры рекомендуется использовать свойства для «простых» операций, таких как доступ к полям. Поэтому в вашем примере я бы использовал подход метода GetWindows, поскольку он намекает потребителям, что это может быть длительный вызов.

6 голосов
/ 26 ноября 2009

Свойство определенно неверно - установщик сгенерирует исключение StackOverflowException, поскольку оно просто повторяется.

Даже получатель очень странный - свойства обычно отражают некоторый аспект свойства или типа, а не просто создают новый объект и забывают его.

Лично я бы пошел с:

public static DataSet CreateWindows()
{
    return new DataSet();
}

Это создает правильное впечатление, что он создает что-то новое - GetWindows подразумевает кеширование или что набор данных является частью статического состояния типа.

Если есть вероятность, что позже вы захотите сделать кэширование, тогда GetWindows разумно - но я бы тогда задокументировал, что он может или не может создать новый результат каждый раз.

1 голос
/ 26 ноября 2009

Я полагаю, что в общих чертах свойство - это то, что объект «имеет», а метод - это то, что объект «делает». В вашем доме «есть» окна, поэтому использование свойства для извлечения набора данных окон будет правильным.

В вашем коде каждый раз, когда кто-то обращается к свойству, создается новый набор данных - вероятно, не то, что вам нужно. Он также объявляется как «статический», что означает, что любой созданный вами объект Дома будет иметь такой же набор окон. Мне кажется, что набор данных должен быть элементом экземпляра, который создается в конструкторе (или в другом подходящем месте). В зависимости от ваших требований, конечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...