Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проектирование интерфейса класса "Хранение информации" (http://www.flasher.ru/forum/showthread.php?t=119737)

petav 29.12.2008 12:57

Проектирование интерфейса класса "Хранение информации"
 
Здравствуйте!

Допустим есть класс, в котором хранятся данные о клиентах и мы можем получить данные зная имя клиента. Пример
Код AS3:

//код с помощью которого данные были добавлены опущен для краткости.
var person = Clients.getPerson('Name');
trace (person.getSex); //Трассировка покажет нам пол клиента Name.

Так пользовать не удобно, удобнее было бы так:
Код AS3:

// 1) Добавляем клиента.
Clients.add('Name');
// 2) Устанавливаем его пол.
Clients.Name.Sex = 'male';
// 3) Получаем пол.
trace(Clients.Name.Sex); //Трассировка покажет нам пол клиента Name.

Вопрос: Как подобное реализовать?

kotez 29.12.2008 13:27

Clients - класс с функциями добавления , стирания (не имею представления его функциональности) , с Массивом клиентов
Client - класс самого клиента с свойствами типа "Пол" .

При добавлении создаешь объект клиента и сохраняешь его в массиве




получится так (если устраивает) :

// 1) Добавляем клиента.
Clients.add('Name');
// 2) Устанавливаем его пол.
Clients.yourArray['Name'].Sex = 'male';
// 3) Получаем пол.
trace(Clients.yourArray['Name'].Sex); //Трассировка покажет нам пол клиента Name.

petav 29.12.2008 14:12

Не совсем то, но на мысль наталкивает...

7thsky™ 29.12.2008 14:21

Если уж больно хочется так, то пожалуйста

файл Clients.as
Код AS3:

package {
 
        public static const Clients:ClientsManager = new ClientsManager ();
 
}

файл ClientsManager.as
Код AS3:

package {
 
        import flash.utils.Proxy;
        import flash.utils.flash_proxy;
 
        use namespace flash_proxy;
 
        public dynamic class ClientsManager
        extends Proxy {
 
                private var clients:Object = {};
                private var clientsCount:int = 0;
 
                public function add (client:Client):Client {
                        var replacedClient:Client;
 
                        if (client) {
                                replacedClient = clients [client.name];
                                clients [client.name] = client;
                                clientsCount ++;
                        } // end if
 
                        return replacedClient;
                }
 
                public function remove (client:Client):Client {
                        if (client && clients [client.name] is Client) {
                                delete clients [client.name];
                                clientsCount --;
                        } // end if
 
                        return client;
                }
 
                public function get length ():int {
                        return clientsCount;
                }
 
                override flash_proxy function getProperty (name:*):* {
                        if (clients.hasOwnProperty (name)) {
                                return clients [name];                                                                               
                        } // end if
 
                        return undefined;
                }
        }
 
}

файл Client.as
Код AS3:

package {
 
        public class Client {
 
                private var _sex:int;
                private var _name:String;
 
                public static const SEX_UNDEFINED:int        = -1;
                public static const SEX_FEMALE:int                = 0;
                public static const SEX_MALE:int                = 1;
 
                public function Client (name:String, sex:int) {
                        _name = name;
                        _sex = sex;
                }
 
                public function toString ():String {
                        return '[Client name="' + _name + '" sex="' + _sex + '"]';
                }
 
                public function get name ()        {        return _name;        }
                public function get sex ()                {        return _sex;        }
 
        }
 
}

Использование
Код AS3:

Clients.add (new Client ('Vasya', Client.SEX_MALE));
Clients.add (new Client ('Mymra', Client.SEX_FEMALE));
 
trace (Clients.Mymra);
trace (Clients.Vasya);


petav 29.12.2008 15:20

Это надо переварить. :) Большое спасибо, 7thsky™.

insected 29.12.2008 17:26

А в чем прикол использования Clients.Vasya ? Чем это особенно удобно?

7thsky™ 29.12.2008 17:52

Я тоже не понял прикола, так хотел Petav - я показал лишь один из способов реализации.

insected 29.12.2008 18:46

petav, расскажите пожалуйста, зачем вам это понадобилось?

litebox 29.12.2008 19:28

У petav, должно быть, очень мощный компьютер и слишком мало ошибок в программе :)

petav 30.12.2008 12:42

Друзья, я лишь пытаюсь удобно и гибко спроектировать приложение. Я пишу видеочат и в классе клиенты будет вся информация о подключившемся пользователе. Ссылка на его поток что бы управлять (воспроизводить/останавливать). Координаты его VideoBoX для чтения и изменения. Ссылка на объект который отображает список пользователей.

Добавлено через 3 минуты
litebox
Цитата:

У petav, должно быть, очень мощный компьютер и слишком мало ошибок в программе
Может Вы предложите на ассемблере писать. Тогда и 386 потянет. Я конечно шучу и не пытаюсь Вас обидеть. Ведь ООП для того и дано, Я хочу просто научиться использовать максимально эффективно. С точки зрения архитектуры.

Добавлено через 8 минут
И наконец-то чем понятнее код и логичнее, тем легче приложение эволюционировать. А если код будет не понятный, то изменения в нем подобно революции. Я не берусь судит что этот подход очень удобный, может в нем как и во многом другом есть недостатки, но мне для решения моей задачи он кажется логичным. Я еще не тестировал работоспособность этого метода, потому как занимаюсь этим проектом в свободное время....

litebox 30.12.2008 13:58

На мой взгляд, самый логичный вариант тот, что предложил kotez. Если пойти дальше, и заменить доступ к полям yourArray['Name'] на геттеры и сеттеры - вот Вам отличная ООП модель.
Но в целом, чтобы принять верное для себя решение - нужно, чтобы было из чего выбирать :)

petav 30.12.2008 22:38

litebox, это вы точно подметили. Чем большим объемом данных по решаемой проблеме обладаешь, тем изящнее можно найти решение.


Часовой пояс GMT +4, время: 06:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.