Владение функциями, действующими на объект - PullRequest
0 голосов
/ 10 июля 2009

Должны ли функции, которые воздействуют на объект и, скажем, заполнять его из xml, принадлежать самому объекту или все, что создает объект, владеет этими функциями?

Ответы [ 3 ]

2 голосов
/ 10 июля 2009

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

Так что, если у вас есть класс A и вы хотите получить данные из XML и создать экземпляры A, это, скорее всего, отдельный класс. Что-то вроде AXmlReader например. Затем он может реализовать интерфейс AReader, и у вас может быть ADBReader и т. Д.

1 голос
/ 10 июля 2009

Я бы объединил ответы geofflane и jpoh, которые оба хороши.

Принцип единой ответственности важен, но вам необходимо сопоставить преимущества разделения ответственности и абстракции с затратами на удобочитаемость и обслуживание кода. Вам действительно нужно создать 4 новых класса для гидратации объекта из XML?

Эх ... Я бы, вероятно, склонялся к простой фабричной методике реализации шаблона, а также.

Это зависит от применения вашего кода, но я мог бы иметь класс SomeObjectFactory с методом CreateSomeObject(XmlReader reader) вместо того, чтобы возложить на него ответственность SomeObject класса.

public class SomeObjectFactory
{
    public static SomeObject CreateSomeObject(XmlReader reader)
    {
        //hydrate a new SomeObject
    }
}

Удачи!

1 голос
/ 10 июля 2009

Это звучит для меня как статический фабричный метод, то есть что-то вроде

public static SomeObject CreateSomeObjectFromDataReader (IDataReader queryResult)
{
    // create SomeObject by populating the fields using the IDataReader
}

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

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