Чисто ли для объекта генерировать другой объект, если не в заводском дизайне? - PullRequest
0 голосов
/ 17 декабря 2010

Скажем вам класс ZipFile и класс Content.
В ZipFile есть метод load () для чтения содержимого всех файлов в zip-архиве и помещения его в объект Content.
Каков наиболее подходящий дизайн ООП?

1) ZipFile.load () создаст объект Content

class ZipFile
{
    public function load()
    {
        // Load all files in zip
        // ...
        Content content = new Content();
        content->set(data);
        return( content );
    }
}
ZipFile zf = new ZipFile();
Content ct = zf->load();
ct->print();

B) Дайте конструктору ZipFile объект Content для заполнения

class ZipFile
{
    private Content content;

    public function ZipFile(content) // constructor
    {
        this->content = content;
    }    
    public function load()
    {
        // Load all files in zip 
        // ...
        this->content->set(data);
    }
}
Content ct = new Content();
ZipFile zf = new ZipFile(ct);
zf->load();
ct->print();

В принципе, лучше ли отделять объекты (слабая связь)? Как процедурный программист старой школы, я не могу перестать подвергать сомнению несколько способов разработки ООП. Я теряю много времени на "как лучше всего ООП это . Любой совет, чтобы обдумать это? Книга? Веб-сайт?

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 17 декабря 2010

Обобщения для двух случаев различны:

Первый случай обобщается до ZipFile, зная конкретный класс его содержимого и возвращая некоторую реализацию интерфейса.

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

Другими словами, первый регистр связывает ZipFile и любой конкретный класс содержимогоявляется.Второй объединяет клиента ZipFile и конкретного класса содержимого.

Учитывая, что весьма вероятно, что ZipFile идет с конкретным конкретным классом для своего содержимого, первое обобщение, вероятно, является более естественным.

...